React HooksのuseEffect内経由でrefを使うとundefinedになっていて動作しなかった。具体的にはこんな感じでキーボードイベントを使いたかったパターン。
const ref = createRef<HTMLDivElement>()
useEffect(() => {
document.addEventListener('keydown', onKeyDown)
return () => document.removeEventListener('keydown', onKeyDown)
})
function onKeyDown(e: KeyboardEvent) {
someFunc()
}
function someFunc() {
ref.current
}
これでrefを指定する。
return (
<div ref={ref}>
</div>
)
すると、キー入力をしてuseEffect経由で呼び出されたsomeFunc内のref.currentはundefinedになっている。よく分からない。
とりあえず、createRefではなく、useRefとuseCallbackを組み合わせるとちゃんといけるっぽい。
const ref = useRef<HTMLDivElement>()
const setRef = useCallback((node: HTMLDivElement) => {
ref.current = node
}, [])
refの指定は下記。
return (
<div ref={setRef}>
</div>
)
複雑…。
Ref objects inside useEffect Hooks - Daniel Schmidt - Medium
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント