ChatGPT на русском языке, бесплатноНовости и обновления в Telegram
На sponsr есть решения ваших задач
Полезные видео о фронтенде. Подпишись на Rutube
Видео-курс по Redux Thunk
2 года назад·1 мин. на чтение
Redux Thunk позволяет выполнять сайд эффекты в приложениях с Redux - сложные синхронные действия, и простые асинхронные действия.
Что такое Redux Thunk?
В случае с Redux можно выполнять только простые обновления. Это делелаеся при помощи диспатча actions. Middleware расширяют эти возможности и можно выполнять асинхронные действия.
Redux Thunk позволяет выполнять сайд эффекты - сложные синхронные действия, и простые асинхронные действия.
1. Что такое Redux Thunk?
В этом видео добавляем Redux Thunk к проекту, смотрим исходники Redux Thunk, пишем thunk и диспатчим. Смотреть на Rutube2. Что такое композиция в Redux Thunk?
В этом видео применяем композицию в Redux Thunk для последовательного и параллельного запроса данных, используем кэш для предотвращения запросов и чтения данных из state. Как организовать цепочку вызовов с Thunk и Composition API? Смотреть на Rutube3. Пишем систему нотификаций с Redux Thunk
В этом видео пишем систему нотификаций при помощи Redux Thunk с возможностью отключения получения нотификаций. Смотреть на Rutube4. Внедрение зависимостей в Redux Thunk
В этом видео внедряем зависимости в Redux Thunk middleware. Смотреть на RutubeКастомный хук для диспатчинга Redux экшенов
2 года назад·1 мин. на чтение
В этой статье напишем кастомный хук для вызова action creator’а Redux вместе с dispatch() внутри.
Часто, вызывая action creator, мы забываем обернуть его в
Допустим, мы работаем над приложением списка задач, и у нас есть действие
В компоненте вызов будет выглядеть следующим образом.
dispatch()
, а вместо этого вызываем как обычная функцию. Таким образом action не доходит до редьюсера.
Мы создадим собственный хук, в котором будет выполняться обертывание вызова функции вaddProductToCart(product); // не верно dispatch(addProductToCart(product)); // верно
dispatch()
, чтобы мы могли отправлять наши экшены, вызывая их как обычные функции с уже встроенным диспатчингом.
Реализация довольно проста.import { useCallback } from 'react'; import { useDispatch } from 'react-redux'; export const useWithDispatch = (fn) => { const dispatch = useDispatch(); return useCallback( payload => () => dispatch(fn(payload)), [dispatch, fn] ) }
useWithDispatch
— это функция высшего порядка, поскольку она принимает функцию (action creator) в качестве аргумента и возвращает другую функцию, которая при вызове вызовет переданную функцию, обернутую с помощью dispatch()
. Обязательно запоминаем функцию обратного вызова с помощью useCallback
.
addTask()
, которое берет текст задачи и добавляет его в список задач:
// actions.js const addTaskAction = (text) => { return { type: 'ADD_TASK', payload: { id: 'some-id', text } } }
import { addTaskAction } from './actions'; export const Component = () => { const addTask = useWithDispatch(addTaskAction); const handleClick = () => { addTask('Learn Redux'); } // ... }
Итоги
Я надеюсь, что вы нашли этот пост полезным. Вам по-прежнему нужно помнить о передаче создателей действий (action creator) вuseWithDispatch
, но будет легче запомнить, что вы делаете это в самом начале, а не при их вызове.