Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Reactjs 在react-redux应用程序中使用es6中的spread运算符和第2阶段加载器_Reactjs_Ecmascript 6_Redux_React Redux - Fatal编程技术网

Reactjs 在react-redux应用程序中使用es6中的spread运算符和第2阶段加载器

Reactjs 在react-redux应用程序中使用es6中的spread运算符和第2阶段加载器,reactjs,ecmascript-6,redux,react-redux,Reactjs,Ecmascript 6,Redux,React Redux,我在我的react redux应用程序中使用ES6 spread操作符,如下所示 var defaultState = {val:1, items:[]}; export default function(state=defaultState, action){ switch(action.type){ case 'ADD_BOOK': state.val = 0; return { ...state, items:action.payload

我在我的react redux应用程序中使用ES6 spread操作符,如下所示

var defaultState = {val:1, items:[]};
export default function(state=defaultState, action){
  switch(action.type){
    case 'ADD_BOOK':
    state.val = 0;
    return {
      ...state,
      items:action.payload.data.result
    };
问题是每次我从分配给项目的
action.payload.data.result
中获取新数据时。我想从以前的状态连接数据。有人能帮忙吗

这应该行得通

return {
  ...state,
  items: [
    ...state.items,
    ...aciton.payload.data.result
  ]
}
这应该行得通

return {
  ...state,
  items: [
    ...state.items,
    ...aciton.payload.data.result
  ]
}

因此,您在这里真正需要做的是对现有项目和从有效负载返回的项目进行检查

假设是这样,那么您需要从旧项目数组和新项目数组创建一个新数组

从减速器返回一个全新的状态。通过克隆现有状态并添加新项目数组来执行此操作:

case 'ADD_BOOK':
    var newState = Object.assign({}, state, {val:0}); // clones the existing state and adds our new val
    newState.items = newState.Items.concat(action.payload.data.result);
    return newState;

使用扩展语法或库(如immutable)有更简洁的方法来实现这一点,但本例将明确实现我们需要做的事情。

因此,您真正需要做的是对现有项和从负载返回的项进行处理

假设是这样,那么您需要从旧项目数组和新项目数组创建一个新数组

从减速器返回一个全新的状态。通过克隆现有状态并添加新项目数组来执行此操作:

case 'ADD_BOOK':
    var newState = Object.assign({}, state, {val:0}); // clones the existing state and adds our new val
    newState.items = newState.Items.concat(action.payload.data.result);
    return newState;

使用扩展语法或库(如immutable)可以有更简洁的方法来实现这一点,但是这个示例将明确实现我们需要做的事情。

返回{…state,items:[…state.items,…action.payload.data.result]}
应该可以工作。ES6没有对象的扩展语法
{…state,items:state.items.concat(action.payload.data.result)
他似乎在使用插件“transform object rest spread”或类似的东西。!
返回{…state,items:[…state.items,…action.payload.data.result]}
应该可以工作。ES6没有对象的spread语法!
{…state,items:state.items.concat(action.payload.data.result)
他似乎在使用插件“transform object rest spread”之类的东西。!