custom hooksをグローバル変数みたいに扱わないで
Origami
Posted on January 23, 2020
english: https://dev.to/origamium/don-t-use-custom-hooks-like-global-state-dda
はい、まずこのコードを見てください。
const useInvalidHooks = () => {
const [state, setState] = useState(false);
const handler = useCallback(() => {
setState(true);
}, []);
return [state, handler];
};
export default function ParentComponent() {
const [state] = useInvalidHooks();
console.log(`parent: ${state}`);
return (
<div>
<InnerComponent />
</div>
);
}
function InnerComponent() {
const [state, handler] = useInvalidHooks();
console.log(`children: ${state}`);
return <button onClick={handler}>hai</button>;
}
このとき、InnerComponet
のbuttonを押下したさい、その親であるParentComponent
でstate
の変更と更新を期待していると、ものの見事に打ちのめされます。変更されません。
経験豊かなReactエンジニアにはその理由はすぐわかると思います。
はい、理由は生成されたhooksは他のhooksの状態とは完全に別ですからです。私はこれに2時間ぐらい悩みましたが…
💖 💪 🙅 🚩
Origami
Posted on January 23, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
react How to build type-enforced UI components in React Native using @shopify/restyle
November 28, 2024
react Double the Talk, Double the Recording: Capturing Both Sides in Interpreted Zoom Meetings
November 27, 2024