I've created a JSfiddle
In this fiddle, initially a list of checkboxes is rendered based on the props
which are passed to the component.
On clicking the Re-render
button, the same component is rendered with a different set of props
.
Now, please follow the below steps-
Re-render
buttonEven after rendering the component with new props
, the state of checked boxes which you checked remains unchanged (2nd and 3rd are still checked)
Why does it happen? How can I re-render the component with new set of props such that the state of checkboxes do not persist.
You're rendering a different component in the same position, so React resets all state below.
To prevent the render method from being called, set the return to false, which cancels the render. This method gets called before the component gets rendered. Sometimes you may want to prevent re-render even if a component's state or prop has changed.
1. Memoization using useMemo() and UseCallback() Hooks. Memoization enables your code to re-render components only if there's a change in the props. With this technique, developers can avoid unnecessary renderings and reduce the computational load in applications.
Because React's diff algorithm is smart. The conditions to rerender a new component are:
Here's a working example: http://jsfiddle.net/lustoykov/ufLyy3vh/
The thing is - neither condition to rerender your input
element is satisfied, so React really reuses the old input
. What I've done is to generate a new key
for every input
element on each rerender. React assumes this is a new element because the key
changes and the input
gets rerendered with the correct value
.
The Math.random()
is necessary in order to make sure you generate different keys, it's like: Hey, React, this element has changed - please rerender it.
However, I would argue against this approach with different keys, because it is against React's philosophy. Why would you use React if you rerender the same element every single time? That's the core of React - not to rerender when the component is the same. Instead, you should use onChange handler to update only the values of your inputs without explicitly rerendering the whole input component.
Have a look how to work with React forms.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With