useEffectEvent
Effect Eventを作る
https://beta.reactjs.org/reference/react/useEffectEvent
https://ja.react.dev/reference/react/experimental_useEffectEvent
https://ja.react.dev/reference/react/experimental_useEffectEvent
https://ja.react.dev/learn/separating-events-from-effects#declaring-an-effect-event
code:ts
const onConnected = useEffectEvent(() => {
showNotification('Connected!', theme);
});
ここで、onConnected はエフェクトイベント (Effect Event) と呼ばれるものです。これはエフェクトロジックの一部でありながら、むしろイベントハンドラに近い動作をします。この中のロジックはリアクティブではなく、常に props と state の最新の値を「見る」ことができます。
useAtomCallbackみたいなイメージ #??
わからん、違うかも
Effect EventはuseEffectの中で呼ぶ
v18時点ではexperimental
code:ts
const onSomething = useEffectEvent(callback)
https://zenn.dev/suzu_4/articles/4abeccb283331b#useeffectevent-を使う
https://tech.hello.ai/entry/2024/07/02/165549
react-hooks/exhaustive-depsを無効にしない
code:ts
export function useEffectEvent<T extends (...args: any[]) => any>(fn: T) {
const ref = React.useRef<T | null>(null)
React.useLayoutEffect(() => {
ref.current = fn
}, fn)
return React.useCallback((...args: Parameters<T>): ReturnType<T> => {
const f = ref.current
return f!(...args)
}, [])
}