Обновление строки в магазине приставок - PullRequest
0 голосов
/ 30 августа 2018

Я использую Redux с реагировать. У меня есть ключ в магазине, значение которого является строкой.

Вот что входит в store.getState();

{appBgColor: "#FFF"}

Я обновляю магазин вот так.

store.dispatch( changeAppBgColor("#FC0") );

Редуктор

const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case CHANGE_APP_BG:
    return { ...state, appBgColor: action.payload};
    default:
      return state;
  }
};

Все работает отлично, appBgColor меняется каждый раз, когда происходит новая отправка.

Задача

Я прочитал, что для смены ключа в хранилище редуксов вы должны использовать concat, slice или join, чтобы сделать состояние неизменным. Поэтому я сомневаюсь, что я делаю это неправильно. Это правильный способ сделать это?

1 Ответ

0 голосов
/ 30 августа 2018

В вашем случае обновления поля appBgColor в вашем штате ваша реализация редуктора равна , правильная .

Обратите внимание, что когда вы возвращаете { ...state, appBgColor: action.payload}, вы не изменяете состояние, а фактически создаете копию существующего состояния, применяете изменение и возвращаете его. Это гарантирует, что состояние является неизменным , т.е. оно не изменяется напрямую.

Вам потребуется использовать такие функции, как слайс, конкатат и т. Д., Когда вы обновляете вложенные элементы в своем состоянии. Например, когда вам нужно удалить элемент из массива в вашем состоянии, вам нужно будет использовать slice, как показано ниже.

const index = state.findIndex(a => a.id === action.id)
return [
    ...state.slice(0, index), ...state.slice(index + 1)
]
...