乐闻世界logo
搜索文章和话题

How to set initial value of jotai to atom when parent component re- render ?

1个答案

1

When using Recoil in React, if you need to set the initial value of an atom when the parent component re-renders, there are several methods to achieve this. Here are two common approaches:

Method One: Resetting the Atom Using an Effect

If you want to reset the atom's value every time the parent component re-renders, you can implement this in the parent component by using useEffect with useSetRecoilState. This ensures that the atom's value is reset to your desired initial value each time the parent component renders.

Example Code:

javascript
import React, { useEffect } from 'react'; import { atom, useRecoilState, useSetRecoilState } from 'recoil'; const myAtom = atom({ key: 'myAtom', default: 0, }); function ParentComponent() { const setMyAtom = useSetRecoilState(myAtom); useEffect(() => { setMyAtom(0); // Set your desired initial value here }, []); // Leave the dependency array empty if you want to reset every time the parent component re-renders return <ChildComponent />; } function ChildComponent() { const [value, setValue] = useRecoilState(myAtom); return ( <div> <p>Value: {value}</p> <button onClick={() => setValue(value + 1)}>Increment</button> </div> ); }

Method Two: Resetting Using Key Changes

This method involves React's key attribute. When the component's key changes, React re-creates the component instead of reusing it, which forces the child component to reinitialize using the atom's default value.

Example Code:

javascript
import React, { useState } from 'react'; import { atom, useRecoilState } from 'recoil'; const myAtom = atom({ key: 'myAtom', default: 0, }); function ParentComponent() { const [key, setKey] = useState(0); const resetAtom = () => { setKey(prevKey => prevKey + 1); // Change the key value }; return ( <> <button onClick={resetAtom}>Reset Atom</button> <ChildComponent key={key} /> </> ); } function ChildComponent() { const [value, setValue] = useRecoilState(myAtom); return ( <div> <p>Value: {value}</p> <button onClick={() => setValue(value + 1)}>Increment</button> </div> ); }

In both approaches, Method One is more suitable for scenarios where you need to reset the atom every time the parent component re-renders, while Method Two is better for cases where you need to indirectly reset the atom through certain operations (such as clicking a button). The choice depends on specific business requirements and the rendering behavior of the parent component.

2024年7月20日 14:55 回复

你的答案