In react, I can set initial value for useState
by using request response, custom hook returns or something else, just like this:
function App() {
const value = useCustomHook();
const [state, setState] = useState(value);
};
And then I can use this state everywhere by using useContext
.
Now I want to migrate to recoil
from useContext
, but I cannot find a way to set initial value which is from a custom hook.
The atomFamily
seems to handle with this scenario, but I think it doesn't make sence to set value on every useRecoilState
:
function Foo() {
const value = useCustomHook();
const [state, setState] = useRecoilState(valueState(value));
return <Boo />
};
function Boo() {
const state = useRecoilValue(valueState); // I want to use value in this way
}
Is it possible to set initial value once and use it everywhere in recoil?
useEffect
can solve this problem, but I want to set initial value at once rendering, not twice.
const value = useCustomHook();
const [state, setState] = useRecoilState(valueState);
useEffect(() => {
setState(value);
}, [value]);
[1]: https://github.com/facebookexperimental/Recoil/issues/603