React hooks with redux
Posted 4 years ago by Ryan Dhungel
Category: React Hooks
Viewed 5024 times
Estimated read time: 2 minutes
This is an example code to use hooks with redux. This is a siple counter app with input field where user can enter their name. This is to demonstrate to you how you can combine multiple reducers and create one single rootReducer to create global state in react.
Example app using react hooks with redux
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
// 1. import redux
import { createStore, combineReducers } from "redux";
import { Provider, useSelector, useDispatch } from "react-redux";
// 2. create reducer/s
// reducers are functions that will update state
function nameReducer(state = {}, action) {
switch (action.type) {
case "UPDATE_NAME":
return action.payload;
default:
return state;
}
}
// 3. combine reducer
// you can add more than one reducer here
const rootReducer = combineReducers({
name: nameReducer,
});
// 4. create store
// requiers reducers and initial state
const store = createStore(rootReducer, {});
// 5. provide store
// once store is ready provide it to components
function App() {
return (
<Provider store={store}>
<Name />
</Provider>
);
}
// 5. access/update state
function Name() {
// allows you to extract data from the Redux store state
const { name } = useSelector((state) => ({ ...state }));
// const { name } = useSelector((state) => ({
// name: state.name,
// }));
// use dispatch method to update state
const dispatch = useDispatch();
function handleUpdateName(event) {
dispatch({
type: "UPDATE_NAME",
payload: event.target.value,
});
}
return (
<div>
<p>{JSON.stringify(name)}</p>
<input placeholder="Input your name" onChange={handleUpdateName} />
</div>
);
}
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
);