Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法更新keyDown上的状态挂钩_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 无法更新keyDown上的状态挂钩

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

我正试图更新SpaceBar press上的状态, 但状态值似乎没有改变(总是打印0)

以下是我尝试过的:

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