17
React class life cycle methods to useEffect
// happens as soon as your component is mounted
componentDidMount() {}
// happens as soon as the updating begin
componentDidUpdate(prevProps, prevState, snapshot) {}
// for certain performance optimizations
shouldComponentUpdate(nextProps, nextState) {}
// happens just before the component unmounts
componentWillUnmount() {}
}
Here are basic templates to convert a class lifecycle method to a useEffect hook:
Create an empty dependency array and pass it to the
useEffect
hook.useEffect(() => {
// code to run when the component is mounted
// Make sure this is empty to ensure the hook will only run once
}, [])
Add the dependency array and pass it to the
useEffect
hook.// props: {name}
// state: {visible}
useEffect(() => {
// ... code to run
// the dependency array below is "equivalent" to:
// the effect will trigger if
// props.name !== nextProps.name || state.enabled !== nextState.enabled
}, [name, visible])
A
useEffect
can return a function whose body will be executed when the component is unmounted.useEffect(() => {
return () => {
// code to run when the component is unmounted
}
}, /* with or without dependency array */)
This is a bit subjective because it's up to the developer to decide how
It could also be a combination of
componentDidUpdate
should behave (the simplest is the same as componentDidMount
mapping).It could also be a combination of
componentDidMount
and shouldComponentUpdate
mapping with the addition of a reference variable to check if the component has been mounted as shown below:const hasMount = useRef(false)
useEffect(() => {
if (hasMount.current) {
// code to run when the component is updated
} else {
hasMount.current = true
}
}, /* dependencies */)`
class
component.
When using hooks, you can define as many useEffect
as you want.useEffect
in a function
componentThe examples above are simple ways to map a
class lifecycle hooks
component to a React hooks
, and there are many other ways to do it. The good news is that you don't need to think of mapping lifecycle hooks to useEffect since React hooks introduced a different paradigm on how we can create a React component and how we can manage side-effects. This mapping is only useful when I'm refactoring a class
component to be a function
component. For newer projects, I ought to think that the class component does not exist.
17