So I got stuck on a very interesting problem today.
Then got to know about state variables
in react. So I thought I should share what I learnt today.
We will learn about :
- What are State variables ?
- How we can make a state variable ?
- Why we need state variables ? (mainly we will explore this!!!)
What are State variables ?
State variables maintain the state of your component.
We can make state variables via useState() Hook.
Hooks are JavaScript functions given by React. Period!!!
React has some hooks. Each has some superpowers (logic is written behind the scene).
How we can make a state variable ?
- First, You will need to import useState() hook like a named import -
import { useState } from "react";
- Initialize useState
const [A,setA] = useState('Hello world');
useState() hook returns an array with 2 values.
- variable which have the respective value(
Hello world
in above case) - The function to update the value
Now our state variable A
has Hello world
value and via setA()
method we can change the value A
.
How to change the value via above method ?
Simply pass the updated value in function.
setA('Bye world');
Now the value of A
is being updated to Bye world
.
Why we need state variables ?
Let's understand with an example here -
We need to add a toggle functionality i.e. feature of Login/Logout button, If a user is logged out ,then button text should be Login
and if click on it, text should change to Logout
and vice versa.
It sounds easy right!!
We can make a variable and store a value in it and on click of the button, change the text.
In below code snippet -
- We made a variable
SessionStatus
and its initial value isLogin
. - We added a
onClick
handler to change the text accordingly. - Added a simple logic to change the button text to
Logout
if its value isLogin
and vice versa.
Also added a log statement to check if our onClick handler is getting called and our variable is getting updated or not.
Please try -
Code snippet 1
If you will see in the console, the variable value is changing that means our click Handler is getting called but we are NOT
able to see the change in button text in our UI.
It's really weird!!!
Let's try making SessionStatus
a state variable and try the same
Code snippet 2
Here it is working. Text of button is ALSO
changing in UI. But why ???
State variables syncs UI layer with data layer. Period!!!
They maintain the state of your component.
Here the value of state variable
is changing and when ever state variables changes/updates, React re-renders the whole component or we can say react reloads the whole component or we can say react calls the component again with the updated values this time.
React does it via Diff Algorithm, i.e. calculates the difference between previous Virtual DOM
and new Virtual DOM
and then that difference is applied to Actual DOM.
Here only button value is changing, so react re-renders the component again with that change only in the DOM.
Virtual DOM - React keeps a track of UI (the DOM) in memory in the form of object and it is Virtual DOM.
React makes the DOM operations
superfast.
This is the core of react.
Here is an interesting observation if you want to understand it one level deep -
You will observe something weird in code snippet 2.
Let's say the first time, the text in the button is currently is Login
and on click, it changes to Logout
but in console it's value is still printing as Login
.
Why is that ??
We put console.log() after value being updated right ??
Then why it does not printed the updated value then and there ??
- The answer to this is that
Setting it
does not change the state variable you already have, but insteadtriggers a re-render
. - React will make a
new instance
of state variable with thenew value
in anew render cycle
. Period!!! - The value which is printing on clicking the button is the value of the variable in the component before the re-render triggered.
Got any doubt or wanna chat? Reach out to me on linkedIn or twitter.
Top comments (0)