redux状态变化渲染时使用splice对状态数组操作时并不会触发view渲染

zhanfang
  • 578

场景:redux状态中存在一个数组[],我想对数组中的item进行添加或修改,修改完成之后希望页面能显示出来,可是使用splice进行操作,无论如何都不会触发页面重新渲染,可是state确实发生了变化,代码如下:

case SUCCESS_ADDKEY:
  let data = state.keys;
  state.keys.splice(0, 0, action.payload);
  return Object.assign({}, state, {
    keys: data
  });
  break;

state发生变化,view未渲染

通过如下改写就能够渲染view

case SUCCESS_ADDKEY:
  let data = [action.payload, ...state.keys];
  return Object.assign({}, state, {
    keys: data,
  });
  break;      

实在不明白原因,求解。

回复
阅读 6.6k
3 个回答

state 必须为新的对象,不推荐通过修改原状态来实现

返回的state 和原來的state的引用不一樣才會發生改變

angentle
  • 1
新手上路,请多包涵

可以使用扩展运算符 相当于更改了引用,this.setState({arr:[...arr]})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏