Skip to content

React-redux by Internet

May 23, 2023 | 12:00 AM

React-redux

Table of Contents

Open Table of Contents

Installation

npm i react react-redux

yarn add react react-redux

Note:- Using react-redux in this way is no longer the recommended way and is depricated. Consider using react-redux with react-toolkit

4 step Setup

Document structure

└── src
    └── redux
        ├── action
        │   └── index.ts
        ├── reducers
        │   ├── index.ts
        │   └── upDown.ts
        ├── hooks.ts
        └── store.ts

Add action

// redux/action/index.js
export const incNumber = () => {
  return {
    type: "INCREMENT",
  };
};

export const decNumber = () => {
  return {
    type: "DECREMENT",
  };
};

Add reducers

// redux/reducers/upDown.js
const initialState = 0;

const changeTheNumber = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      return state + 1;
    case "DECREMENT":
      return state - 1;
    default:
      return state;
  }
};

export default changeTheNumber;

// redux/reducers/index.js
import { combineReducers } from "redux";
import changeTheNumber from "./upDown";

const rootReducer = combineReducers({
  changeTheNumber,
});

export default rootReducer;

Optional hooks file

If using typescript only then this hooks file is needed else useDispatch and useSelector can be directly imported and used

import store from "./store";
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";

type AppDispatch = typeof store.dispatch;
type RootState = ReturnType<typeof store.getState>;

export const useAppDispatch = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;

Add provider to main.js

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import "./index.css";
import { Provider } from "react-redux";
import store from "./redux/store";

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>
);

And finally use

//app.ts
import { useAppDispatch, useAppSelector } from "./redux/hooks";
import { incNumber, decNumber } from "./redux/action";

const count = useAppSelector(state => state.changeTheNumber);
const dispatch = useAppDispatch();

// dispatch(incNumber())
// dispatch(decNumber())
//app.js
import { useDispatch, useSelector } from "react-redux";
import { incNumber, decNumber } from "./redux/action";

const count = useSelector(state => state.changeTheNumber);
const dispatch = useDispatch();

// dispatch(incNumber())
// dispatch(decNumber())