У меня уже есть заявление о переключении в моем редукторе. Как добавить дополнительное условие if в редуктор? - PullRequest
1 голос
/ 17 октября 2019

Использование React-Redux-Thunk ... Я пытаюсь понять, как лучше справиться с этим вариантом использования в моем редукторе. При добавлении нового searchterm в базу данных мне нужно обновить свое состояние (которое представляет собой сводку по числу самых популярных запросов в формате json (ключ "value- searchterm: count). Моя цель - добавить 1 к счетчику, если мой ключ serachterm существует, иначе создатьновый ключ: значение с "serachterm": 1

Как мне это кодировать в моем редукторе

export default function topSearchReducer(state = {topSearches: []}, action) {
  console.log('action', action);
  console.log('Inside Top Search reducer state', state);
  switch (action.type) {
    case 'FETCH_TOP_SEARCHES':
      return {topSearches: action.payload}
    case 'UPDATE_TOP_SEARCH'
       if(action.searchterm in state.topSearches[0]){
         console.log( 'FOUND IN OBJECT!');
       }
    default:
      return state
  }
};

1 Ответ

1 голос
/ 17 октября 2019

Как я правильно понимаю, КАЖДЫЙ ПУНКТ вашего массива topSearches - это ОБЪЕКТ - карта, где ключом является searchTerm, а значением является count. Я не понимаю, что у вас в массиве, так как вы проверяете только первый элемент массива (topsearches[0]), но хорошо, попробуйте это:

case 'UPDATE_TOP_SEARCH':
    return {
        ...state,
        topSearches: [
            // update first item of array
            {
                // copy the previous state of map
                ...state.topSearches[0],
                // update item of map -
                // if searchterm was already there increase the count, otherwise add value 1
                [action.searchterm]: (
                    action.searchterm in state.topSearches[0] ?
                        state.topSearches[0][action.searchterm] + 1 :
                        1
                )
            },
            // just put shallow copy of all other items
            ...state.topSearches.slice(1)
        ]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...