Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对对象的更新问题作出反应_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 对对象的更新问题作出反应

Javascript 对对象的更新问题作出反应,javascript,reactjs,redux,Javascript,Reactjs,Redux,当我试图通过分派更新对象的属性时,我无法直接看到更新 state.disable = action.payload; return state; 上面的代码让我使用了一个技巧来更新状态,但是这个技巧存在性能问题 let tempState = Object.assign({},state); tempState.disable = action.payload; return tempState; 这一个很好用,然后DOM直接更新。顺便说一句,当我经常使用这个应用程序时,它变得非常慢,而且状

当我试图通过分派更新对象的属性时,我无法直接看到更新

state.disable = action.payload;
return state;
上面的代码让我使用了一个技巧来更新状态,但是这个技巧存在性能问题

let tempState = Object.assign({},state);
tempState.disable = action.payload;
return tempState;
这一个很好用,然后DOM直接更新。顺便说一句,当我经常使用这个应用程序时,它变得非常慢,而且状态是一个大对象


如何解决这个问题并强制react更新dom,即使对象的属性发生了更改?

使用object.assign()虽然有效,但由于其语法相当冗长,因此很快就会使简单的简化程序难以读取

另一种方法是使用最近添加到JavaScript规范中的对象扩展语法。它允许您使用spread(…)操作符以更简洁的方式将可枚举属性从一个对象复制到另一个对象。对象扩展操作符在概念上类似于ES6数组扩展操作符

所以这是可行的

返回{
……国家,
禁用:action.payload
}
您可以使用

使用Immer,您可以编写如下内容

import produce from 'immer';

const initialState = {
  text: ''
}

const textReducer = (state = initialState, action) => {
  switch(action.type) {
    case UPDATE_TEXT: {
      return produce(state, draft => {
        draft.text = action.payload;
      });
    }
  }
}

    state.something = somethingelse
顺便说一句,你不应该做这样的事

import produce from 'immer';

const initialState = {
  text: ''
}

const textReducer = (state = initialState, action) => {
  switch(action.type) {
    case UPDATE_TEXT: {
      return produce(state, draft => {
        draft.text = action.payload;
      });
    }
  }
}

    state.something = somethingelse

这打破了不变的模式,你可以阅读更多的内容,你正在改变状态,
对象。分配
正是你应该做的,它与性能无关,这是你应用程序中的一些其他问题。作为
对象的替代。分配
你也可以做
返回{…状态,禁用:action.payload}
。但是,就像上面已经说明的注释一样,Object.assign很可能不是问题所在,因此我怀疑这能否解决您的问题。