
React’s 6 Main Hooks Explained
React Hooks are functions that let you use state and other React features in functional components. They were introduced in React 16.8 to simplify state management and side effects in React applications. In this blog post, we will explore the six main hooks in React: useState
, useMemo
, useCallback
, useContext
, useEffect
, and useReducer
.
useState
The useState
hook lets you add state to your functional components. It returns an array with two elements: the current state value and a function to update it.
const [count, setCount] = useState(0);
In this example, useState(0)
initializes the state variable count
with a value of 0
. The setCount
function is used to update the state value. For example:
setCount(1);
This changes the count
value to 1
.
useMemo
The useMemo
hook returns a memoized value that only gets recalculated when the specified dependencies change. This is useful for optimizing performance.
const area = useMemo(() => {
return calcSurfaceArea(size);
}, [size]);
Here, useMemo
calculates the area
only when size
changes, thus avoiding unnecessary calculations.
useCallback
The useCallback
hook returns a memoized version of a callback function that only changes when its dependencies change. This helps in avoiding unnecessary re-renders.
const handleRenderArea = useCallback(() => {
updateSurfaceArea(size);
}, [size]);
In this case, handleRenderArea
will only update when size
changes.
useContext
The useContext
hook accepts a context object created using React.createContext
and returns the current value of that context.
const value = useContext(ThemeContext);
Here, useContext
returns the current value of ThemeContext
.
useEffect
The useEffect
hook allows you to perform side effects in your components, such as fetching data or adding event listeners. It runs after the initial render and after every update.
useEffect(() => {
addListeners();
return () => {
removeListeners();
};
});
In this example, event listeners are added after the initial render and cleaned up just before the component unmounts. You can also specify dependencies to control when the effect runs:
useEffect(() => {
fetchUserInfo(userID);
}, [userID]);
This effect runs after the first render and every time userID
updates.
useReducer
The useReducer
hook is similar to useState
but allows you to manage more complex state logic. It returns the current state and a dispatch function.
const [state, dispatch] = useReducer(updateCount, {count: 0});
The updateCount
function defines how the state is updated based on the action object:
const updateCount = (state, action) => {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
throw new Error();
}
};
To update the state, you call the dispatch function with an action object:
dispatch({type: 'decrement'});
This example decrements the count
value by 1.
Conclusion
React hooks provide a powerful and flexible way to manage state and side effects in functional components. By understanding and utilizing useState
, useMemo
, useCallback
, useContext
, useEffect
, and useReducer
, you can write cleaner and more efficient React code.
Follow Us:
Stay updated with our latest tips and tutorials by subscribing to our YouTube Channel.