Давайте кратко рассмотрим, как мы можем использовать Redux в приложении React. Использование Redux немного отличается от использования vanilla Redux непосредственно в приложении JS. Чтобы Redux работал с React, нам нужно добавить определенные библиотеки, которые будут работать как адаптер между ванильной библиотекой Redux и React. Также мы можем использовать React Hooks для использования или изменения контекста, хранящегося в Redux.
Более новая версия Redux предоставляет нам очень мощную библиотеку Toolkit, позволяющую создавать срезы. Мы можем использовать Redux с React, используя 3 библиотеки:
редукс | реакция-редукс | @reduxjs/инструментарий
Давайте напишем базовый код для использования Redux с приложением React UI.
Шаг 1: Первый шаг — создать слайсы. Каждый слайс состоит из имени, начального объекта контекста для хранилища и функций редуктора для управления хранилищем.
Давайте создадим Slice в файле с именем counterSlice.js.
// We will use toolkit to create Slice import {createSlice} from "@reduxjs/toolkit"; const counterSlice = createSlice({ name: "counter", initialState: {count:0} reducers:{ increment: state => { state.count += 1; } //looks like store is mutable decrement: state => { state.count -= 1; } //actually its not!! see below incrementBy: (state,action) => { state.count += action.payload; } decrementBy: (state,action) => { state.count -= action.payload; } } }); export default counterSlice;
Шаг 2: Следующим шагом является создание магазина. Давайте сделаем это в файле store.js. Аналогичным образом мы можем добавить несколько фрагментов в хранилище.
// We will use toolkit to configure Store import {configureStore} from "@reduxjs/toolkit"; import counterSlice from "./counterSlice"; const store = configureStore({ reducer: { counter: counterSlice.reducers } }); export default store;
Шаг 3: Далее мы импортируем Provider и привяжем к нему наш магазин: Давайте сделаем это в нашем index.js.
// We will use "react-redux" to use <Provider> tag import ReactDOM from "react-dom/client"; import { Provider } from "react-redux"; import App from "./App"; import store from "./store"; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <Provider store={store} > <App /> </Provider> );
Шаг 4: Получите доступ к хранилищу из компонентов и попробуйте манипулировать. Давайте попробуем это из App.js
// We will use "react" for useSelector and useDispatch Hooks! import {useSelector, useDispatch} from "react"; import counterSlice from "./counterSlice.js"; const App = () => { const count = useSelector(state => { state.counter.count }); //subscribe! const dispatch = useDispatch(); const {increment,decrement,increamentBy} = CounterSlice.reducers; return ( <div> <h1>Counter: {counter} </h1> <button onClick={() => dispatch(increment()) }>INC</button> <button onClick={() => dispatch(decrement()) }>DEC</button> <button onClick={() => dispatch(incrementBy()) }>INC_BY</button> <button onClick={() => dispatch(decrementBy()) }>DEC_BY</button> </div> ); }
Я надеюсь, что фрагменты кода были в значительной степени понятными.
Еще немного вещей!
На шаге 1 мы видим, что получаем доступ к текущему состоянию нашего состояния и изменяем его state => { state.count += 1; }
, но за сценой этот код будет преобразован в промежуточный код, который будет манипулировать состоянием неизменным образом. Насколько мне известно, инструментарий делает это за кулисами.
Кроме того, фрагменты кода показывают, как создать отдельный фрагмент и добавить его в хранилище. Мы можем создать несколько фрагментов и предоставить их на верхний уровень дерева компонентов и получить только необходимый фрагмент хранилища. Попробуйте создать несколько и получить к ним доступ через компоненты. Должно быть выполнимо.
Кроме того, мы знаем, что хранилище не может быть изменено напрямую и должно быть таким, используя редукторы, которые будут обеспечивать обновление до последнего состояния хранилища и более эффективное выполнение библиотекой Redux. В конце концов, магазин Redux — единственный источник правды. Мы должны защитить его.
И Redux предоставляет одно единственное хранилище для приложения. при использовании React Hooks у нас может быть несколько объектов и поставщиков контекста, использующих useContext. Но теперь Redux предоставляет концепцию слайсов… что делает его более мощным.
Вот и все люди. дайте мне знать, если нужна коррекция. Спасибо!