React State Management (3) : Redux Toolkit

Lada496
2 min readMar 7, 2022

--

This is a series of memos referring to the ways of React state management: context API, Redux, Redux toolkit and Recoil The topic in this article is Redux Toolkit.

The chart below is the whole image of this practice application. ComponentA accepts user input text and passes it over to ComponentB as a prop. At the same time, dispatch the action to save the data in the store so that ComponentC and componentD can use it.

This is the image of this application.

1) Set up slices, and store

First of all, you need to install react-redux and @reduxjs/toolkit.

npm install @reduxjs/toolkit react-redux

text-slice.js

import { createSlice } from "@reduxjs/toolkit";const textSlice = createSlice({
name: "text",
initialState: {
text: null,
},
reducers: {
submit(state, action) {
state.text = action.payload;
},
},
});
export const { submit } = textSlice.actions;
export default textSlice;

index.js

import { configureStore } from "@reduxjs/toolkit";
import textSlice from "./text-slice";
const store = configureStore({
reducer: { text: textSlice.reducer },
});
export default store;

2) Provider

index.js

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";

import { Provider } from "react-redux";
import store from "./store/intex";
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById("root")
);

3) useDispatch, useSelector

ComponentA

import { useState } from "react";
import { useDispatch } from "react-redux";
import { textActions } from "../store/text-slice";
import ComponentB from "./ComponentB";
const ComponentA = () => {
const [value, setValue] = useState("");
const dispatch = useDispatch();
const changeHandler = (e) => {
setValue(e.target.value);
dispatch(submit(e.target.value));
};
return (
<>
<input type="text" value={value} onChange={changeHandler} />
<ComponentB text={value} />
</>
);
};
export default ComponentA;

ComponentC

import { useSelector } from "react-redux";
const ComponentC = () => {
const text = useSelector((state) => state.text.text);
return (
<>
<h1>Uppercase</h1>
<h2>{text && text.toUpperCase()}</h2>
</>
);
};
export default ComponentC;

ComponentD

import { useSelector } from "react-redux";
const ComponentD = () => {
const text = useSelector((state) => state.text.text);
return (
<>
<h1>Lowercase</h1>
<h2>{text && text.toLowerCase()}</h2>
</>
);
};
export default ComponentD;

The whole code is available here

Thank you for reading :)

--

--