Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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 这个spread声明应该做什么?_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 这个spread声明应该做什么?

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

我对Redux有些生疏,没有很好地注释我的代码。我使用console.log查看了控制台,但不知道发生了什么

我也在这里看了一本书

我删除了其他案例以简化问题

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次。这并不是说它没有效率(虽然我想不是),而是因为它不是一种非常纯粹的方法-最好只在需要返回新对象时创建并返回一个新对象,我看到了不可接受的东西,是不是还有什么东西让你困惑?