[英]How to access stateless component state inside window event listener?
我有一個無狀態組件,需要監聽鍵盤事件。 它在安裝組件時添加keydown
偵聽器,並在卸載組件時將其刪除。 有一個狀態test
是boolean
值。 安裝組件時將其設置為true
。 但是在keydown事件偵聽器中,其值始終為false
。 看起來偵聽器沒有采用狀態引用。 我的代碼有什么問題?
const { useEffect, useState } = React;
const Comp = () => {
const [test, setTest] = useState(false);
const keyPressHandler = (e) => {
setTest(!test);
console.log(test);
}
useEffect(() => {
setTest(true);
window.addEventListener('keydown', keyPressHandler);
return () => {
window.removeEventListener('keydown', keyPressHandler);
};
}, []);
return (
<div className="test">
hello {test + ""}
</div>
);
};
您可以在測試更改時重新運行useEffect,這將使偵聽器始終具有當前值。
useEffect(() => {
setTest(true);
window.addEventListener('keydown', keyPressHandler);
return () => {
window.removeEventListener('keydown', keyPressHandler);
};
}, [test]);
並且應該將setTest從useEffect中刪除,因為無論何時使用setTest()
它都會將test更改為true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.