需要在redux的reducer中追加数组中的数据

时间:2017-09-11 09:01:33

标签: javascript reactjs redux react-redux

我正在进行分页,我将获取每个页面点击的数据。我想用先前的值附加数据。这是我当前的代码。不知道这样做。

const InitialProjects={
    projectList:[],
    error:null,
    loading:false
}

export const projects=(state=InitialProjects,action)=>{
    switch(action.type){
        case ActionTypes.FETCH_PROJECTS:
            return Object.assign({},state,{
                projectList:[],error:null,loading:true
            })
        case ActionTypes.FETCH_PROJECTS_SUCCESS:
            return {
                projectList:action.payload

            }
        case ActionTypes.FETCH_PROJECTS_FAILURE:
            return Object.assign({},state,{
                projectList:["not-found"],error:action.payload.message||action.payload.status,loading:false
            })
        default:
            return state;
    }
}

我的第一个回复看起来像这样

[
{
  Id:0,
Name:india
},
{
Id:1,
Name:bang
},
{
Id:3,
Name:us
},
{
 Id:5,
Name:uk
}
]

第二次回复将是这样的

   [
    {
      Id:8,
    Name:india
    },
    {
    Id:12,
    Name:bang
    },
    {
    Id:19,
    Name:us
    },
    {
     Id:35,
    Name:uk
    }
    ]

请注意,id字段可能不是连续的。 我想在我的redux

中想要这样的东西
projectList:
0(pin): {Id:1,Name:'dewd'}
1(pin): {Id:2,Name:'tyytg'}
2(pin): {Id:5,Name:'xsx'}
3(pin): {Id:4,Name:'tyyt'}
4(pin): {Id:10,Name:'xsx'}
5(pin): {Id:17,Name:'xsx'}

感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:7)

您可以在每次成功时传播结果。

case ActionTypes.FETCH_PROJECTS:
  return {
    ...state,
    error: null,
    loading: true,
  }
case ActionTypes.FETCH_PROJECTS_SUCCESS:
   return {
     ...state,
     projectList: [...state.projectList, ...action.payload]
    }

答案 1 :(得分:1)

看起来对象扩展运算符在您的情况下不起作用。所以答案的ES5版本就是。

    case ActionTypes.FETCH_PROJECTS_SUCCESS:
       return Object.assign(
                {}, 
                state, 
                { 
                   projectList: state.projectList.concat(action.payload)
                });

使用stateObject.assign中的所有先前值复制到新对象中,然后通过连接projectList中的旧值和来自state.projectList的新值来覆盖新的action.payload属性#include "tensorflow/core/framework/op.h" #include "tensorflow/core/framework/shape_inference.h" using namespace tensorflow; REGISTER_OP("ZeroOut") .Input("to_zero: int32") .Output("zeroed: int32") .SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c){ c->set_output(0, c->input(0)); return Status::OK(); });

希望它有所帮助!