Javascript 需要在redux的reducer中的数组中追加数据
我正在进行分页,在这里我将获得每个页面单击的数据。我想用以前的值附加数据。这是我当前的代码。我不知道该怎么做Javascript 需要在redux的reducer中的数组中追加数据,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我正在进行分页,在这里我将获得每个页面单击的数据。我想用以前的值附加数据。这是我当前的代码。我不知道该怎么做 const InitialProjects={ projectList:[], error:null, loading:false } export const projects=(state=InitialProjects,action)=>{ switch(action.type){ case ActionTypes.FETCH
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: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'}
感谢您的帮助。谢谢您可以在每次成功后传播结果
case ActionTypes.FETCH_PROJECTS:
return {
...state,
error: null,
loading: true,
}
case ActionTypes.FETCH_PROJECTS_SUCCESS:
return {
...state,
projectList: [...state.projectList, ...action.payload]
}
看起来对象扩展操作符在您的情况下不起作用。因此,您的答案的
ES5
版本是
case ActionTypes.FETCH_PROJECTS_SUCCESS:
return Object.assign(
{},
state,
{
projectList: state.projectList.concat(action.payload)
});
这将使用对象将状态
中以前的所有值复制到新对象中。分配
然后通过将状态.项目列表
中的旧值与操作.有效负载
中的新值串联起来,覆盖新的项目列表
属性
希望有帮助 感谢@Hemerson的可能副本。我在…附近出错,状态为意外标记。谢谢。我添加了babel插件转换对象rest spread,现在没有错误。但是当我检索响应时,以前的值将被新值替换!!!从
案例操作类型中删除projectList:[]
。获取项目:
,然后它就会工作:)如果projectList是一个对象怎么办?如何在不覆盖键的情况下浅层合并两个对象?如果projectList
是一个对象,则基本上需要一个额外的对象。分配而不是.concat
。如果需要在不重写的情况下浅层合并对象,则应将第二个和第三个参数的顺序交换为对象.assign
。就我所了解的对象.assign
的工作原理而言,它区分对象的根级别键,并返回具有唯一键的新对象,交换对象将始终覆盖顺序中的第一个对象。控制台:const a={1:1,2:2};常数b={1:3,2:2};log(Object.assign({},a,b));log(Object.assign({},b,a));无论如何谢谢你的帮助是的,就是这样。交换顺序时,第一个对象的根级别键(现在技术上是第二个)不会被第二个对象中的相同根级别键覆盖。这不是你想要的还是我误解了你的问题?不,我想在分配的新对象中保持两个键冗余。我已经做了一个transformer函数,将响应对象转换成数组,在存储中使用,而reducer将简单地将传入的转换数组再次连接到存储中。无论如何,谢谢你的帮助。