Можно ли смешивать ActionCreators и Actions с Redux?

Мой опыт в основном связан с React Hooks & Context, где определены действия и редукторы. Затем действия импортируются в компонент React и вызываются через функцию Dispatch.

В новом проекте я должен использовать React Hooks и Redux. Здесь я использую Action Creators & Reducers. Вот пример Создателя действий, который я создал:

export const fetchCompanies: ActionCreatorThunk = () => {
  return function (dispatch, getState) {
    dispatch({ type: FETCH_COMPANIES_REQUEST });

    requests
      .get(
        `${requests.API_ROOT()}companies`,
        null,
        true
      )
      .then((response) => {
        dispatch({ type: FETCH_COMPANIES_SUCCESS, payload: response.data.companies });
      })
      .catch((error) => {
        console.error(error);
        dispatch({ type: FETCH_COMPANIES_FAILURE, payload: error.response });
      });
  };
};

Это прекрасно работает.

Вот моя ситуация: мне нужно действие для создания пустой компании, поэтому нет необходимости создавать Создателя действий. Таким образом, я создал такое действие:

export const INIT_EMPTY_COMPANY: ActionType = 'INIT_EMPTY_COMPANY';
export type InitEmptyCompanyAction = { type: typeof INIT_EMPTY_COMPANY };

С помощью Action Creator я вызывал его из useEffect следующим образом:

dispatchRedux(fetchCompanies());

Что касается действия, я подумал, что могу вызвать его в стиле, аналогичном тому, как я всегда называл действия с контекстом, например так:

dispatchRedux({ type: InitEmptyServiceFormAction });

К сожалению, я получаю эту ошибку потока: невозможно ссылаться на тип InitEmptyCompanyAction [1] из позиции значения.

Что я делаю неправильно и как я могу это исправить?


person robertwerner_sf    schedule 23.11.2020    source источник


Ответы (1)


Я понял это, но чувствую себя глупо, что я не видел этого раньше. Мне почему-то пришло в голову, что INIT_EMPTY_COMPANY — это тип. У него действительно есть тип, а именно ActionType, но сам по себе он не является типом. Моя ошибка заключалась в попытке импортировать его как тип.

Думаю, нужно больше спать!

person robertwerner_sf    schedule 23.11.2020