
Dependencies
npm install react-redux redux
Insert the following as below
index.js
<StrictMode>
<Provider store={store}>
<App />
</Provider>
</StrictMode>
App.js
import "./styles.css";
import { useSelector, useDispatch } from "react-redux";
import { bindActionCreators } from "redux";
import { actionCreators } from "./state/index";
export default function App() {
const state = useSelector((state) => state);
const dispatch = useDispatch();
const { depositMoney, withdrawMoney } = bindActionCreators(
actionCreators,
dispatch
);
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<p>{state.account}</p>
<button onClick={() => depositMoney(1000)}>Deposit money</button>
<button onClick={() => withdrawMoney(1000)}>Withdraw money</button>
</div>
);
}
state/index.js
export * as actionCreators from "./action-creators/index";
state/store.js
import { createStore, applyMiddleware } from "redux";
import reducers from "./reducers/index";
import thunk from "redux-thunk";
export const store = createStore(reducers, {}, applyMiddleware(thunk));
state/action-creators/index.js
export const depositMoney = (amount) => {
return (dispatch) => {
dispatch({
type: "deposit",
payload: amount
});
};
};
export const withdrawMoney = (amount) => {
return (dispatch) => {
dispatch({
type: "withdraw",
payload: amount
});
};
};
state/reducers/accountReducer.js
const reducer = (state = 0, action) => {
switch (action.type) {
case "deposit":
return state + action.payload;
case "withdraw":
return state - action.payload;
default:
return state;
}
};
export default reducer;
state/reducers/index.js
import { combineReducers } from "redux";
import accountReducer from "./accountReducer";
const reducers = combineReducers({
account: accountReducer
});
export default reducers;