npm install react-redux @reduxjs/toolkit
counterSlice.js
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
count: 0,
};
const counterSlice = createSlice({
name: "counter",
initialState,
reducers: {
increment: (state) => {
state.count += 1; // immer allows mutation
},
decrement: (state) => {
state.count -= 1;
},
},
});
export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;
store.jsx
import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "./counterSlice";
const store = configureStore({
reducer: {
counter: counterReducer,
},
});
export default store;
main.jsx
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
import { Provider } from 'react-redux'
import store from './store.js'
createRoot(document.getElementById('root')).render(
<StrictMode>
<Provider store={store}> {/* Wrap your App inside Provider */}
<App />
</Provider>
</StrictMode>,
)
App.jsx
import { useSelector, useDispatch } from "react-redux";
import { increment, decrement } from "./counterSlice";
function App() {
const count = useSelector((state) => state.counter.count);
const dispatch = useDispatch();
return (
<>
<button onClick={() => dispatch(increment())}>+</button>
<button onClick={() => dispatch(decrement())}>-</button>
<h1>{count}</h1>
</>
);
}
export default App;