javascript - 为什么Redux中state改变需要这么来能进行同步?请问有什么更好的方法来避免吗?
PHP中文网
PHP中文网 2017-04-11 09:16:43
[JavaScript讨论组]
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里面对象的赋值是引用造成的,但是想不明白,为什么引用的过程中改变原对象中的数值,在引用后的对象上就看不到了

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
迷茫

感觉楼主这里有误区,说说我的理解,看看是不是楼主想问的: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函数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号