为了账号安全,请及时绑定邮箱和手机立即绑定

工作中会这么拆分细化来写代码吗?

我只想问一下: 老师你在工作中会这么写代码吗?    vue中的vuex比这简单十倍。十分钟就能够消化并自己写。 而你这么拆分细化,并不能让人容易理解,而我感觉是增加了复杂度。 其实工作中怎么写,就在课堂上怎么写就好了。更实用。

正在回答

3 回答

感觉老师讲得不太在意细节和来龙去脉!如下本人精力阐述下来龙去脉;希望对同学们有丢丢帮助!!!



学习redux: containers这个文件是大关卡,理解它很总要!containers里面写的是容器组件;顾名思义它理应只是拿来承载props的;承载props;自然是为传给UI组件来显示;containers里面的组件并不应该拿来显示内容的;


那么想想我们怎么得到props呢?


props包含两种东西:一个是某个reducer对应的state的值;或者是多个reducer对应多个state的值;

 另一个是:你想你的UI组件需要去触发action对吧?但是你不能直接在UI组件写action吧?所以使用mapDispatchToProps方法来加载出所有当前容器组件需要使用的action;把action当做容器组件的属性;这样你的UI组件不就可以拿到这个containers文件中容器组件的action了么?


 reducer一般做两件事情:


第一件事情;将当前reducer文件里面要用到state转为props给显示组件用;;

 connect(mapStateToProps,mapDispatchToProps)(MaterialApi);

 这里connect方法里面的两个方法mapStateToProps会返回你想要的那几个reducer对应的几个state 的某个值;mapDispatchToProps会返回你想在当前这个 containers文件中需要用到的action;connect这个高阶函数会将这两个方法的返回值都传给MaterialApi这个容器组件;明白了吧;现在你的容器组件就可以

 使用到;你想用的某个reducer的state的值了;你可以拿到action了;action可以让你当做容器组件的属性传给UI组件来触发了;

 function mapStateToProps(state) {

 return {

 user: state.reducer1.user,

 age: state.reducer2.age,

 param: state.reducer3.param,

 }

 }

 如上:你看到了mapStateToProps(state)方法的参数state了吗?它是什么?怎么来的?

 const rootReducer = combineReducers({

 reducer1,

 reducer2,

 reducer3,

 reducer4,

 });


在我们开发项目的时候;必定有多个reducer文件;使用combineEeducers方法将多个reducer合并成一个;

 我们知道一个reducer就会返回一个新的state;现在多个reducer合并成了一个reducer;下面有将这个总的reducer

 合并成了一个store;

 const store = createStore(reducers);

 我一直觉得store是个概念性的东西;形象点说;一个reducer对应一个state;然后通过combineReducers将多个state合并成了一个大的state对象; 这个大的state那就是mapStateToProps方法的参数state的来源了;

 既然你知道了这个大的state就是由多个小的reducer的state的合并的对象!记住它是一个对象;可以用他逆向拿到某个reducer;拿到某个

 reducer的某个值了;如上 user: state.reducer1.user,

 这样就拿到名叫reducer1的reducer的state的user值了;

同时:mapStateToProps方法会将我们拿到的state.user转为props;

 随后我们在容器组件 ;在render方法中直接

 { user,age ,param} = this.props;

 哈哈;容器组件就可以把它当做属性值来传给UI组件啦!!!


第二件事情:在mapDispatchToProps方法中加载出这个reducer要用到的action;这样拿到action之后;让action作为容器组件的属性;这样component的UI

 组件就可以调用这个action了;

 function mapDispatchToProps(dispatch) {

 return {

 dispatch,

 actionName1: (params)=>dispatch(actions.actionName1(params)),

 actionName2: (params)=>dispatch(actions.actionName2(params)),

 actionName3: (params)=>dispatch(actions.actionName3(params)),

 actionMame4: (params)=>dispatch(actions.actionName4(params)),

 }

 }


 如上我们在mapDispatchToProps方法中加载出我们当前containers文件要调用到的action;(是写好需要用到的Action而不是所有的action)  和我们的容器组件需要传给自己的UI组件的action;

 例如我们在当前页面有一个:componentWillMount方法;在里面初始化 一个action;直接actionName1();

 这样就会自动去触发dispatch(action);


总结一下:redux的设计思想简单的说;

第一步:action :不管三七二之一;模拟出事件;


第二步:reducer:  开发中自然有多个reducer; 

新建一个reducer文件只做一件事;吧多个reducer合并成一个reducer.

使用combineReducers方法来将多个reducer合并成一个;每个reducer会生成一个新的state;将多个reducer合并成一个reducer;那也就等同于将多个小的state合并成一个大的state对象;


第三步: const store = createStore(reducers); 将state交给store管理;


第四步:这样想:action和reducer都是单独的东西;store将存储着所有的state;


可以认为以上种种都是为了容器组件服务的;在containers里面计算得到state并转为props;得到需要的action也传给显示组件!!


第五步:容器组件中mapStateToProps方法可以得到所有的reducer对应的state并转为props;


mapDispatchToProps方法可以访问到所有的action;写好action:传给UI组件来用。


最后:很多对redux感觉很蒙圈;其实要理清楚来龙去脉就好了;

上面是我个人的见解!如有毛病;欢迎交流

















5 回复 有任何疑惑可以回复我~

react也可以做的很简单。但是我只想说你问这个问题的目的是什么?到底是什么?这门课程讲的就是redux,你说你不用redux也可以做。是,是可以做,那你还点进来看个毛线?你说vue简单,那你们这些整天bb着vue简单的人,知不知道vue也用了这些概念?就只用vue做个hello world,也叫会用vue?

0 回复 有任何疑惑可以回复我~

react更适合用来处理复杂的大型项目!!简单的小项目jq就可以搞定了,当然vue也很方便

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
在React中使用Redux数据流
  • 参与学习       27830    人
  • 解答问题       40    个

在react中使用redux数据流,通过一个样例工程的开发了解具体原理

进入课程

工作中会这么拆分细化来写代码吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信