#reactjs #typescript #redux #redux-toolkit
Вопрос:
Я следовал документу redux toolkit typescript doc. В документе говорится, что для создания собственного крючка useDispatch, приведенного ниже
export const useAppDispatch = () => useDispatch<AppDispatch>()
и используйте его в компонентах следующим образом
const dispatch = useAppDispatch();
const increase = () => {
dispatch(increase());
}
Все работает идеально. Но то, что я ожидал, должно иметь разумное представление обо всех действиях, которых не хватает. Мой вопрос в том, как я могу достичь этих типов, чтобы я мог получить помощь от typescript, какие действия разрешены для аргумента отправки.
при наведении на функцию отправки отображаются следующие типы
const dispatch: <AnyAction>(action: AnyAction) => AnyAction
Любая помощь будет признательна.
Ответ №1:
С помощью Redux любое действие может быть отправлено в любое время. Таким образом, концептуально не имеет смысла пытаться ограничить, какие действия могут быть отправлены на уровне типов. Существует ряд библиотек и статей «Redux TS», которые пытаются реализовать этот подход, но мы, сопровождающие, считаем, что это бесполезно.
См.Сообщение сопровождающего Redux Ленца Вебера «Не создавайте типы объединений с помощью действий Redux» для получения более подробной информации.
Тем не менее, я бы, по крайней мере, ожидал, что при наведении курсора useAppDispatch
появится тип TS, который больше похож на этот:
(alias) useAppDispatch(): ThunkDispatch<CombinedState<{
// fill in actual state fields for your app here
}>, null, AnyAction> amp; ThunkDispatch<...> amp; Dispatch<...>
import useAppDispatch
Дважды проверьте настройки своего приложения и убедитесь, что вы используете RTK configureStore
для создания магазина.
Комментарии:
1. Спасибо, Мейкериксон. Я понимаю вашу точку зрения. В целях обучения не могли бы вы поделиться некоторыми ссылками на статьи, в которых это реализовано?
2. Боюсь, я не совсем понимаю, о чем вы здесь просите. Не могли бы вы уточнить?
3. «Существует ряд библиотек и статей «Redux TS», которые пытаются реализовать этот подход» — мне просто любопытно изучить эти подходы, поэтому я запросил несколько статей.