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很可能不是问题所在,因此我怀疑这能否解决您的问题。