Как я могу вернуть избыточное состояние с увеличенным или уменьшенным значением? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь вернуть состояние в редуксе, которое просто увеличивает / уменьшает значение.

Переменная, которую я пытаюсь увеличить, выглядит следующим образом:

state = {
     posts = [
        {title: 'bla', id: '123', value: 1},
        {title: 'bla2' , id: '321' value: 2},
        {title: 'bla3', id: '135' value: 3}
     ]
}

из действий, которые я отправляю, у меня есть идентификатор объекта, который я хочу увеличить. Вот что я попробовал:

state.map(post => {
        if(post.id === action.id){
          let newCount = post.value - 1;
          return {
            ...post,
            value: newCount
          }
        }
      })

Но это не работает, и я не уверен, как это решить.


Точно так же, как вы все знаете, мне просто нужно было вернуть ему оператор use and else, чтобы вернуть сообщение, если я не смог найти идентификатор.

выглядит так:

return state.map(post => {
        if(post.id === action.parentId){
          let newCount = post.commentCount - 1;
          return {
            ...post,
            commentCount: newCount
          }
        }
        else{
          return post;
        }

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

Устраняет ли это проблему?

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 неизменным образом - поэтому вам нужно присвоить результат чему-либо и использовать его позже, как в приведенном выше коде.

0 голосов
/ 13 марта 2019

Вам необходимо отобразить сообщения и затем вернуть новый объект состояния, например:

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})
0 голосов
/ 12 марта 2019

Попробуйте:

state.posts.map(post => {

вместо:

state.map(post => {

Поскольку вы должны перебирать массив записей вместо состояния Object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...