With the release of React 16.3, some new lifecycle methods have been introduced, and release of React 17 will deprecate some lifecycle method.
getDerivedStateFromProps
is one of those newly introduced lifecycle method replacing componentWillReceiveProps
, which has now become UNSAFE_componentWillReceiveProps
.
getDerivedStateFromProps
is a static method which is invoked after a component is instantiated as well as when it receives new props. Since it is a static method, you cannot access this
inside this method neither you can access any other class method. Unlike componentWillReceiveProps
you cannot set state inside this method, so the only way to update state is returning an object. If you don’t want to update any state, simply return null
.
This is how componentWillReceiveProps
works.
We compare nextProps.someValue
with this.props.someValue
and if both are different then we perform some operation, setState
and call this.classMethod();
.
Now let’s have a look how getDerivedStateFromProps
works.
It receives two params nextProps
and prevState
. As mentioned previously you cannot access this
inside this method so you’ll have to store the props in the state to compare the nextProps
with previous props. In above code nextProps
and prevState
are compared, if both are different then an object will be returned to update the state otherwise null
will be returned indicating state update not required. If state changes then componentDidUpdate
is called where we can perform the desired operations as we did in componentWillReceiveProps
.
Let’s say we’re getting some data from firebase and displaying it in the form of stats. Here’s the code for the same.
The above example uses componentWillReceiveProps
. Initially, the displayStat.js
component will listen to firebase on path-1
, when a user clicks on the Change Path button the state will change in the App.js
file and componentWillReceiveProps
will be called in the displayStat.js
file. The previous connection to firebase path will be closed, and a new will get created. Notice we’re passing firebase reference as parameters to getDate()
to listen to firebase.
Now let’s do the same thing using getDerivedStateFromProps
.
Notice an object is being returned in the getDerivedStateFromProps
to update the state and no class method is being called. We’re using componentDidUpdate
to check if a path is changed or not and accordingly create a new firebase connection and listen to new path.
**Thanks for reading this article. Please hit the Clap button if you like it.**Connect with me on LinkedIn.You can also follow me on Twitter, Quora, and GitHub.