Передача состояния redux диспетчеру

#reactjs #redux #recompose

#reactjs #redux #перекомпозировать

Вопрос:

В настоящее время я пишу проект React (используя redux и recompose) и пытаюсь передать мое состояние redux в мою отправку внутри моего подключения.

Я бы хотел избежать написания моего кода подключения дважды, но мне пришлось сделать это, чтобы currentLocaleCode отображалось в состоянии, чтобы отправка могла получить его из моего локального состояния.

Вот как это выглядит:

 export default compose(
  connect(
    (
      {
        locales: { currentLocaleCode }
      }
    ) => ({ currentLocaleCode })
  ),
  connect(null, (dispatch) => ({
    fetchPage: () =>
      dispatch(pagesActions.fetchPage(currentLocaleCode))
  })),
...
  

Я хотел бы немедленно получить currentLocaleCode доступный и добиться чего-то вроде следующего:

 export default compose(
  connect(
    ({ locales: { currentLocaleCode } }) => ({ currentLocaleCode }),
      (dispatch, { currentLocaleCode }) => ({
        fetchPage: () =>
          dispatch(pagesActions.fetchPage(currentLocaleCode))
      }),
...
  

Возможно ли это?

Ответ №1:

Вместо использования двух подключений, вы могли бы просто передать данные компоненту в качестве реквизитов и вызвать action creator с требуемыми данными

Нравится

 export default compose(
  connect(({locales: { currentLocaleCode }}) => ({ currentLocaleCode }),
  (dispatch) => ({
    fetchArticles: (dispatch) => ({
      fetchPage: =>
        (currentLocaleCode) => dispatch(pagesActions.fetchPage(currentLocaleCode))
    })
  })),
...
  

и в подключенном компоненте вы бы вызвали страницу выборки следующим образом

 this.props.fetchPage(this.props.currentLocaleCode);
  

Комментарии:

1. Привет, Шубхам, я случайно добавил дополнительный код, которого там не должно было быть. Сейчас я его удалил. В принципе, fetchArticles и fetchPage не должны были записываться друг в друга, и мой вопрос был скорее в том, как избежать записи connect дважды.

2. Что касается вашего комментария, я бы хотел избежать необходимости передавать currentLocaleCode каждый раз, когда я вызываю свой метод, поскольку он уже доступен в моем состоянии.