状态已经改变,但渲染不会再次调用

时间:2017-02-20 01:30:16

标签: reactjs redux

减速器

`
saveEnd(state, action){
  let data = action.payload;
  let data1 = {};
  data1['' + data.platform] = {};
  data1['' + data.platform]['' + data.type] = data;
  $.extend(true, state.serCfgData, data1);
  return state
}
`

我发现chrome redux开发工具中的状态发生了变化,但视图没有更新,那么当我使用return {...state}视图更新时,我不明白。

1 个答案:

答案 0 :(得分:1)

当你看到你的redux商店更新但没有看到组件重新渲染时,你应该做的第一件事就是检查你的状态对象是否被改变。

根据有关extend的jquery文档:

  

将两个或多个对象的内容合并到中   对象

请注意,在您的代码中:

// jQuery.extend( [deep ], target, object1 [, objectN ] )
$.extend(true, state.serCfgData, data1);

您正在改变状态对象而不是它的副本。 你可以这样做,以避免改变状态:

...
...
// Babel Stage 3 spread operator
const newState = {...state};

$.extend(true, newState.serCfgData, data1);
return newState;

请注意,当您return {...state}时,它更新的原因是您返回一个新对象(Spread运算符会创建一个新对象。)

观看此视频,了解如何避免缩减器中的对象突变:

https://egghead.io/lessons/javascript-redux-avoiding-object-mutations-with-object-assign-and-spread