Redux изменить несколько состояний - PullRequest
0 голосов
/ 15 февраля 2019

Допустим, у меня есть глобальный редуктор состояний, который имеет такую ​​форму:

глобальный редуктор:

const globalInitialState = {
  userId: 0,
  year: 1900
}

Тогда у меня есть редуктор состояний для данных, основанных на этихглобальные параметры:

сводный редуктор:

Данные пользователя 10 за 2018

const summaryDataInitialState = [{data for user 10, 2018}, {data}, {data}]; 

для обновления "сводных данных«У меня есть асинхронное избыточное действие:

Сводные действия:

getSummary = (userId, year) => {
  return async dispatch => {
    let data = await api.getData(userid, year);
    dispatch(success(data));
  }
}

Но когда вы меняете год в глобальном масштабе, как я должен инициировать обновление сводных данных?

Должен ли я вызывать суммарное действие getSummary из моего действия updateYear или это плохой шаблон / дизайн?Мне не нравится, как это связывает "summaryActions" с "globalActions".И в дальнейшем, возможно, потребуется изменить множество «подсостояний», когда эти глобальные перемены будут изменены.Кроме того, я не хочу, чтобы начальная установка userId, year инициировала получение всех состояний в приложении, я хочу получить это по мере необходимости.

1 Ответ

0 голосов
/ 15 февраля 2019

Вы можете отправить тип редуктора напрямую, и тогда редуктор просто подберет его, не импортируя напрямую действие.

getSummary = (userId, year) => {
  return async dispatch => {
    let data = await api.getData(userid, year);
    dispatch(success(data));
    dispatch({type: 'UPDATE_YEARLY', payload: year})
  }
}

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

суммарный редуктор:

SET_SUCCESS: (state, action) => ({...state, year: action.payload.year, userid: action.payload.userid})

и затем в глобальном редукторе:

SET_SUCCESS: (state, action) => ({...state, year: action.payload.year})

Если они оба будут смотреть один и тот же тип (SET_SUCCESS), тогда они будутоба принимают отправку этого действия с полезной нагрузкой.

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