Don't be too dependent on useState, useRef is there for you

ยท

2 min read

Hello ๐Ÿ‘‹ Hope all are doing good in this pandemic time.

Whenever i am seeing any reactjs code snippets in internet i am noticing the unnecessary usage of useState.

In react updating a state is a very expensive in terms of performance. The main reason is whenever the state updates the component will re-render again.

Here is an small example: Screenshot 2021-07-24 at 5.36.02 PM.png

In the above code i created a counter using useState when i am incrementing the counter App component is re-rendering again. There if you check the logs Component initialised got printed 4 times (1st time when component initialised and 3 times when i clicked on the + button). It is re-rendering the App component because i am updating the state on click of the + button.

Here we need to use state because our intention is to show the counter value in the document.

Consider the following code ๐Ÿ‘‡๐Ÿป Screenshot 2021-07-24 at 5.51.43 PM.png

Here i am using two state variables one is for value next is to set type of input. Do we really need two state variables ๐Ÿค” ?. Actually why don't we try building this component without state ? the reason why i am saying like this is assume if we are building a form has many input fields in that case we need to pass value state to input component from form component if that's the case entire form component will re-render on every keystroke in any input.

Solution

In the second example actually we don't need state. useRef is fine. Check the below code ๐Ÿ‘‡๐Ÿป

in the โ˜๐Ÿป snippet we are not using state but still we able to achieve what we want without out re-rendering. Even in form use case instead if passing state from form to input we can pass ref it will prevent unnecessary re-renders.

So what i would suggest is whenever you are dealing DOM manipulation like changing class name conditionally or changing any attribute of element etc.. then try to use useRef instead of useState. it will prevent your app from too many re-renders.

If you feel this content is useful please share this article and mention your reaction.

Thank you!!!

Follow me on

Linkedin : linkedin.com/in/saketh-kowtha

Twitter : twitter.com/sakethkowtha

Github : github.com/saketh-kowtha

Did you find this article valuable?

Support Saketh Kowtha by becoming a sponsor. Any amount is appreciated!

ย