function cloneState(state) {
return JSON.parse(JSON.stringify(state));
}
export default function rootReducer(state = dataModule,action = {}){
state = cloneState(state);
switch (action.type){
case 'REDUX_TEST':
state.config= ++state.config;
break;
}
return state
}
如题.上面的代码是reducer的部分,如果不加jsong.stringify,mapStateToProps方法就不能奏效,能不能说下产生这个的原因?
我先说说我的看法,我觉得它是因为JavaScript里面对象的赋值是引用造成的,但是想不明白,为什么引用的过程中改变原对象中的数值,在引用后的对象上就看不到了
感觉楼主这里有误区,说说我的理解,看看是不是楼主想问的:P
在redux中,reducer是纯函数,需要返回一个全新的对象才会触发redux对state的修改,如果是在原对象上进行修改则无法触发,因为redux会先比较前后两份state的引用,相同就return啦。所以这里JSON.parse(JSON.stringify(state))的语法,无非也是通过这种怪怪的方式另外克隆了一份state数据。
我的建议是这里使用es6 object.assign的语法
case 'REDUX_TEST':
return Object.assign({},state,{config:state.config++});
break;
或者用lodash的clone或者assign函数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。