Javascript 组件多次安装
因此,我只是尝试在特定按键上切换React组件的可见性 这是完美的工作方式,但似乎每次我使用ctrl+`切换组件可见性时,进程都会越来越慢,并且我的应用程序组件中onKey函数的console.log(e)会被调用10,50100、1000次等等 这就是我目前所拥有的Javascript 组件多次安装,javascript,reactjs,Javascript,Reactjs,因此,我只是尝试在特定按键上切换React组件的可见性 这是完美的工作方式,但似乎每次我使用ctrl+`切换组件可见性时,进程都会越来越慢,并且我的应用程序组件中onKey函数的console.log(e)会被调用10,50100、1000次等等 这就是我目前所拥有的 ReactDOM.render( <React.StrictMode> <Router> <App /> </Router> </Rea
ReactDOM.render(
<React.StrictMode>
<Router>
<App />
</Router>
</React.StrictMode>,
document.getElementById('root')
);
function App() {
const [compHidden, toggleComp] = useState(true);
const onKey = (e) => {
console.log(e)
if(e.ctrlKey && e.key === '`') {
toggleComp(!compHidden);
}
}
document.addEventListener('keydown', onKey);
return (
<ComponentToHide hidden={compHidden}/>
);
}
function ComponentToHide(props) {
return (
<div style={{display: props.hidden ? 'none' : 'flex'}}>
<p>Visible</p>
</div>
)
}
ReactDOM.render(
,
document.getElementById('root'))
);
函数App(){
const[compHidden,toggleComp]=useState(true);
const onKey=(e)=>{
控制台日志(e)
如果(e.ctrlKey&&e.key==='``){
切换comp(!compHidden);
}
}
文件。addEventListener('keydown',onKey);
返回(
);
}
功能组件隐藏(道具){
返回(
可见的
)
}
不要在渲染函数中使用document.addEventListener
,因为组件每次渲染时都会调用该函数,并且每次都会添加新的事件Listener
相反,在安装组件时,使用仅添加一次事件列表器:
函数应用程序(){
const[compHidden,setCompHidden]=useState(true);
useffect(()=>{
const onKey=(e)=>{
控制台日志(e)
如果(e.ctrlKey&&e.key==='``){
setCompHidden(值=>!值);
}
}
文件。addEventListener('keydown',onKey);
return()=>document.removeEventListener('keydown',onKey);
}, [])
返回(
);
}
有两点需要注意:
第一次将其切换为可见状态似乎效果很好,但之后停止工作(无法隐藏它)是否与此警告有关?React Hook useEffect缺少依赖项:compHidden'。包括它或删除依赖项数组。如果在“toggleComp”调用react hooks/depsahh中只需要“compHidden”,那么还可以执行函数更新“toggleComp(c=>…)”,我认为应该更新setState函数以使用回调表单修改其值。我已经完全更新了postWorks中的代码,非常感谢!你能解释一下为什么我们需要做这个改变吗?我也得到了警告:“useEffect”已经定义,但从未使用过未使用的变量,但我不知道为什么