Lifting the state allows your sibling components to share a single source of truth. In a hierarchy tree, components can only inherit data from their parent components.
Lets walk through this test application.
Our hierarchy looks like this.
We have a parent component with two children components. Our goal is to make our Child component be a button that changes the color of Child2's text.
In our Parent component, we initialize the state with a key of color and value of 'blue'.
Because we want to change the sate we have a function in the Parent component that does just that. It's a conditional that checks if the this.state.color is equal to 'blue'. If that is true, we set the sate to 'red' and if false, we set the state to back to 'blue'
Next, we have a render function that returns both Child and Child2. Child inherits the reference to this.setColor, and Child2 inherits this.state.color.
Child does one thing. It renders a button with an event listener. Our callback function for the click event is the function that Child inherited from Parent. We access this by using the properties given via this.props.changeColor.
So now every time Child's button is clicked, the function in the Parent component is invoked and changes the state.
Since we are rendering our Child2 component in our Parent as well, every time we change the state, Parent gets re-rendered which inturn re-renders each child.
This is where the magic happens.
Now let's look at Child2.
Child2's only job is to render some text. We have our p tag with an inline style set to Child2's color property. When Parent gets re-rendered by setState Child2 get's re-rendered with the new state as its new prop!
Recap
Every time Child's button is clicked, Child invokes the instance method defined in the Parent. That instance method changes the state based on its contents and triggers a re-render. Child2 is now re-rendered with the new state as an inherited property.






Top comments (2)
This is so helpful!
Glad I could help!