Javascript 这个spread声明应该做什么?
我对Redux有些生疏,没有很好地注释我的代码。我使用console.log查看了控制台,但不知道发生了什么 我也在这里看了一本书 我删除了其他案例以简化问题Javascript 这个spread声明应该做什么?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我对Redux有些生疏,没有很好地注释我的代码。我使用console.log查看了控制台,但不知道发生了什么 我也在这里看了一本书 我删除了其他案例以简化问题 const Articles = (state, action) => { console.log('state', state); let newState = { ...state }; // here? console.log('newState', newState); switch
const Articles = (state, action) => {
console.log('state', state);
let newState = { ...state }; // here?
console.log('newState', newState);
switch(action.type) {
case "updateArticles":
newState.articles = action.articles;
break;
}
return newState;
};
此语句
let newState={…state}代码>将对象克隆到新对象中。这有助于确保您只需执行let newState=state
并仅传递引用。在React(和redux)中,状态不应发生变化,因为React使用Object.is
确定有状态值是否已更改(如果未检测到更改,将跳过重新渲染)
你所拥有的不是解构,而是扩展语法——你正在创建状态
对象的浅层副本,并将副本放入名为newState
的变量中。这意味着将新状态设置为newState
将导致重新渲染
如果您使用state
变量而不是新的newState
变量来改变旧状态,则很可能没有看到重新渲染。See-您正在事后填充它。我不喜欢它。我会在必要时在案例中进行克隆。reducer被调用6次只是为了加载文章,但我只启动了action updateArticles 1次。这并不是说它没有效率(虽然我想不是),而是因为它不是一种非常纯粹的方法-最好只在需要返回新对象时创建并返回一个新对象,我看到了不可接受的东西,是不是还有什么东西让你困惑?