Installation
The recommended way to start new apps with React and Redux is by using the official Redux+JS template or Redux+TS template for Create React App, which takes advantage of Redux Toolkit and React Redux’s integration with React components.
# Redux + Plain JS template
npx create-react-app my-app --template redux
# Redux + TypeScript template
npx create-react-app my-app --template redux-typescript
# Redux + Plain JS template
npx create-react-app my-app --template redux
# Redux + TypeScript template
npx create-react-app my-app --template redux-typescript
# Redux + Plain JS template
npx create-react-app my-app --template redux
# Redux + TypeScript template
npx create-react-app my-app --template redux-typescript
or an existing react app:
# If you use npm:
npm install react-redux
# If you use npm:
npm install react-redux
Using React Redux
store.js
import {configureStore} from '@reduxjs/toolkit';
const counterReducer = (state = {counter: 0}, action) => {
if (action.type === "increment") {
return {counter: state.counter + 1};
} else if (action.type === "decrement") {
return {counter: state.counter - 1};
export const store = configureStore({
import {configureStore} from '@reduxjs/toolkit';
const counterReducer = (state = {counter: 0}, action) => {
if (action.type === "increment") {
return {counter: state.counter + 1};
} else if (action.type === "decrement") {
return {counter: state.counter - 1};
}
return state;
}
export const store = configureStore({
reducer: counterReducer
});
import {configureStore} from '@reduxjs/toolkit';
const counterReducer = (state = {counter: 0}, action) => {
if (action.type === "increment") {
return {counter: state.counter + 1};
} else if (action.type === "decrement") {
return {counter: state.counter - 1};
}
return state;
}
export const store = configureStore({
reducer: counterReducer
});
index.js
import React from 'react';
import { createRoot } from 'react-dom/client';
import { Provider } from 'react-redux';
import { store } from './app/store';
import reportWebVitals from './reportWebVitals';
const container = document.getElementById('root');
const root = createRoot(container);
import React from 'react';
import { createRoot } from 'react-dom/client';
import { Provider } from 'react-redux';
import { store } from './app/store';
import App from './App';
import reportWebVitals from './reportWebVitals';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
reportWebVitals();
import React from 'react';
import { createRoot } from 'react-dom/client';
import { Provider } from 'react-redux';
import { store } from './app/store';
import App from './App';
import reportWebVitals from './reportWebVitals';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
reportWebVitals();
Counter.js
import {useSelector, useDispatch} from 'react-redux';
const counter = useSelector(state => state.counter);
const dispatch = useDispatch();
const incrementHandler = () => {
dispatch({type: "increment"});
const decrementHandler = () => {
dispatch({type: "decrement"});
<div>Counter : {counter}</div>
<button onClick={incrementHandler}>Increment</button>
<button onClick={decrementHandler}>Decrement</button>
import {useSelector, useDispatch} from 'react-redux';
function Counter() {
const counter = useSelector(state => state.counter);
const dispatch = useDispatch();
const incrementHandler = () => {
dispatch({type: "increment"});
}
const decrementHandler = () => {
dispatch({type: "decrement"});
}
return (
<div>
<div>Counter : {counter}</div>
<div>
<button onClick={incrementHandler}>Increment</button>
<button onClick={decrementHandler}>Decrement</button>
</div>
</div>
);
}
export default Counter;
import {useSelector, useDispatch} from 'react-redux';
function Counter() {
const counter = useSelector(state => state.counter);
const dispatch = useDispatch();
const incrementHandler = () => {
dispatch({type: "increment"});
}
const decrementHandler = () => {
dispatch({type: "decrement"});
}
return (
<div>
<div>Counter : {counter}</div>
<div>
<button onClick={incrementHandler}>Increment</button>
<button onClick={decrementHandler}>Decrement</button>
</div>
</div>
);
}
export default Counter;
References
https://react-redux.js.org/introduction/getting-started