我正在尝试在redux中返回仅增加/减少值的状态。
我要增加的变量看起来像这样:
state = {
posts = [
{title: 'bla', id: '123', value: 1},
{title: 'bla2' , id: '321' value: 2},
{title: 'bla3', id: '135' value: 3}
]
}
从我分派的动作中,我有要增加的对象的ID。所以这就是我尝试过的:
state.map(post => {
if(post.id === action.id){
let newCount = post.value - 1;
return {
...post,
value: newCount
}
}
})
但是它不起作用,我不确定如何解决这个问题。
请大家知道,如果我找不到ID,我只需要给它返回use和else语句以返回帖子。
看起来像这样:
return state.map(post => {
if(post.id === action.parentId){
let newCount = post.commentCount - 1;
return {
...post,
commentCount: newCount
}
}
else{
return post;
}
答案 0 :(得分:2)
这可以解决问题吗?
let result = state.posts.map(post => {
if(post.id === action.id){
let newCount = post.value - 1;
return {
...post,
value: newCount
}
}
return post; // handle this case too
})
这将以不变的方式正确地更新id
中给定的state
的元素-因此,您需要将结果分配给某些内容,然后像上面的代码一样使用它。
答案 1 :(得分:0)
尝试:
state.posts.map(post => {
代替:
state.map(post => {
因为必须迭代帖子数组而不是状态Object
答案 2 :(得分:0)
您需要映射帖子,然后返回新的状态对象,如下所示:
case UPDATE_POST_COUNT:
let updatedPosts = state.posts.map(post => {
if(post.id === action.id){
let newCount = post.value - 1;
return {
...post,
value: newCount
}
}
return post; // handle this case too
})
// now construct the new state object
return Object.assign({}, state, {posts: updatedPosts})