Javascript 无法更新keyDown上的状态挂钩
我正试图更新SpaceBar press上的状态, 但状态值似乎没有改变(总是打印0) 以下是我尝试过的:Javascript 无法更新keyDown上的状态挂钩,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我正试图更新SpaceBar press上的状态, 但状态值似乎没有改变(总是打印0) 以下是我尝试过的: import'/App.css'; 从“react”导入{useState,useEffect}; 函数App(){ const[counter,setCounter]=useState(0); 常量keyHandler=()=>{ 开关(如钥匙代码){ 案例32: 设置计数器(计数器+1); 控制台日志(计数器) 打破 } } useffect(()=>{ addEventListen
import'/App.css';
从“react”导入{useState,useEffect};
函数App(){
const[counter,setCounter]=useState(0);
常量keyHandler=()=>{
开关(如钥匙代码){
案例32:
设置计数器(计数器+1);
控制台日志(计数器)
打破
}
}
useffect(()=>{
addEventListener(“keydown”,e=>keyHandler(e));
}, [])
返回(
{计数器}
);
}
导出默认应用程序
您的keyHandler
回调将关闭您的状态值,因此不会对更新做出反应。看
const-App=()=>{
const[counter,setCounter]=React.useState(0);
常量keyHandler=(e)=>{
开关(如钥匙代码){
案例32:
设置计数器((计数器)=>计数器+1);
打破
违约:
//无所事事
}
};
React.useffect(()=>{
文件。添加了监听器(“keydown”,keyHandler);
return()=>document.removeEventListener(“keydown”,keyHandler);
}, []);
返回(
点击我
{计数器}
);
};
ReactDOM.render(,document.getElementById('root'))
我相信您的keyhandler参数列表中可能缺少一个e
。非常感谢!!!这似乎是工作,但你能给更多的解释,我读了你提供的链接,但我仍然不明白它是如何工作这不是一个琐碎的话题,有很多关于它的文章。我想请你参考这些。简短的版本是,当创建keyHandler
时,它会保留对其周围状态的引用。此时,计数器
为0
。当你第一次调用它时,你的应用程序似乎运行得很好。但只要keyHandler
存在于内存中,它就会始终认为计数器
是0
。