如何以增加或减少的值返回redux状态?

时间:2019-03-12 20:36:10

标签: reactjs redux

我正在尝试在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;
        }

3 个答案:

答案 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})