Сегодня мы углубимся в реализацию Redux Toolkit в вашем приложении React. Redux Toolkit, как мы обсуждали в предыдущих руководствах, представляет собой пакет, предназначенный для упрощения распространенных вариантов использования Redux. Он предоставляет служебные функции, которые помогают сократить шаблонный код, связанный с Redux.
Мы начнем с простого примера и постепенно будем вводить сложные шаблоны.
Создание магазина Redux с помощью Redux Toolkit
В Redux Toolkit мы используем configureStore
для создания хранилища вместо createStore
. Эта функция принимает объект конфигурации, в котором мы можем указать наши редукторы, промежуточное ПО и энхансеры.
Начнем с создания простого хранилища с фиктивным редюсером.
import { configureStore } from '@reduxjs/toolkit'; const reducer = (state = {}, action) => state; const store = configureStore({ reducer: reducer, }); console.log(store.getState());
В этом примере мы настраиваем хранилище Redux, используя configureStore
. Мы предоставляем простую функцию-редуктор, которая возвращает состояние как есть, независимо от отправленного действия. Если мы запишем store.getState()
, то получим пустой объект {}
, потому что это начальное состояние, которое возвращает наш редьюсер.
Упрощение действий и редукторов с помощью createSlice
Одним из основных преимуществ Redux Toolkit является функция createSlice
. Эта функция генерирует создателей действий и типы действий, которые соответствуют определяемым нами редукторам и состоянию.
import { configureStore, createSlice } from '@reduxjs/toolkit'; const counterSlice = createSlice({ name: 'counter', initialState: 0, reducers: { increment: state => state + 1, decrement: state => state - 1, }, }); const store = configureStore({ reducer: counterSlice.reducer, }); console.log(store.getState()); // Output: 0 store.dispatch(counterSlice.actions.increment()); console.log(store.getState()); // Output: 1
В этом коде мы определяем часть нашего хранилища Redux, используя createSlice
. Объект counterSlice
включает в себя автоматически сгенерированные создатели действий и функцию редуктора. Затем мы используем этот фрагмент при создании нашего магазина Redux. Затем мы можем отправлять действия с помощью сгенерированных создателей действий, что приводит к обновлениям в нашем магазине.
Обработка асинхронных операций с помощью createAsyncThunk
Redux Toolkit также упрощает обработку асинхронных операций с помощью createAsyncThunk
. Эта функция создает преобразователь Redux, который отправляет действия для указания жизненного цикла асинхронной операции.
import { configureStore, createSlice, createAsyncThunk } from '@reduxjs/toolkit'; const fetchUserById = createAsyncThunk( 'users/fetchById', async (userId, thunkAPI) => { const response = await fetch(`https://reqres.in/api/users/${userId}`); return response.data; } ); const usersSlice = createSlice({ name: 'users', initialState: { entities: [], loading: 'idle' }, reducers: {}, extraReducers: (builder) => { builder.addCase(fetchUserById.fulfilled, (state, action) => { state.entities.push(action.payload); }); }, }); const store = configureStore({ reducer: { users: usersSlice.reducer, }, }); store.dispatch(fetchUserById(1));
В этом примере мы определяем асинхронный преобразователь fetchUserById
, который извлекает пользователя по его идентификатору. Затем мы определяем usersSlice
нашего магазина Redux. Этот фрагмент реагирует на действие, отправленное, когда обещание, возвращенное fetchUserById
, выполнено. Он обновляет поле entities
своего состояния, нажимая на полученного пользователя.
Вот и все! Теперь вы узнали, как использовать Redux Toolkit в своем приложении React, делая ваш код Redux более управляемым и читабельным. Помните, что путь обучения и совершенствования никогда не заканчивается. В следующем посте мы еще глубже погрузимся в мир Redux. А пока удачного кодирования!
Если вам понравилась статья и вы хотите выразить свою поддержку, сделайте следующее:
👏 Аплодируйте истории (50 аплодисментов), чтобы эта статья попала в топ
👉Подпишитесь на меня в Среднем
Посмотрите больше контента в моем профиле Medium