Javascript 如何防止react-onClick函数的状态更新(外部useEffect)?
当我使用Javascript 如何防止react-onClick函数的状态更新(外部useEffect)?,javascript,reactjs,scope,use-effect,Javascript,Reactjs,Scope,Use Effect,当我使用useffect时,我可以通过将这样的变量置零来防止未安装组件的状态更新 useffect(()=>{ 活动常量={state:true} //... 如果(!alive.state)返回 //... return()=>(alive.state=false) } 但是,当我使用一个通过点击按钮调用的函数时(在外部useffect),如何做到这一点呢 例如,此代码不起作用 export const mycop=()=>{ 活动常量={state:true} useffect(()=>{
useffect
时,我可以通过将这样的变量置零来防止未安装组件的状态更新
useffect(()=>{
活动常量={state:true}
//...
如果(!alive.state)返回
//...
return()=>(alive.state=false)
}
但是,当我使用一个通过点击按钮调用的函数时(在外部useffect
),如何做到这一点呢
例如,此代码不起作用
export const mycop=()=>{
活动常量={state:true}
useffect(()=>{
return()=>(alive.state=false)
}
const onclickthit=async()=>{
const response=wait letsbehere5seconds()
如果(!alive.state)返回
setSomeState('嘿')
//警告,因为这里的alive.state为真,
//…与useEffect变量不同
}
}
还是这个
export const mycop=()=>{
活动常量={}
useffect(()=>{
alive.state=true
return()=>(alive.state=false)
}
const onclickthit=async()=>{
const response=wait letsbehere5seconds()
如果(!alive.state)返回//alive.state未定义,则返回
setSomeState('嘿')
}
}
当组件重新呈现时,它将对当前上下文的变量进行垃圾收集,除非它们的状态为“已满”。如果您希望在呈现期间保留一个值,但不希望在更新时触发重新呈现,请使用useRef
挂钩。
当onClick处理程序仍在处理时,是什么导致组件无法装入?可能会将逻辑从click处理程序移动到拥有它的组件。当超时2秒显示modalSorry时,只需快速单击一下,我想我的重点更多的是弄清楚为什么会发生这种情况,以防止出现场景In不要只是治疗症状和使用权宜之计。你的观点完全正确,但在模式场景中,除了使用这些权宜之计之外,如果用户在显示消息的模式下快速单击,我真的看不出我如何防止警告。我猜你还没有清楚地解释该场景。是不是有点像模式是dis已播放,被解雇后“逗留”片刻,一个不耐烦的用户有点高兴吗?我刚用
useState
检查过,但很明显,当我更新它时,我导致了一个重播,useRef
没有,您的解决方案工作得很好,谢谢!!
export const MyComp = () => {
const alive = useRef(false)
useEffect(() => {
alive.current = true
return () => (alive.current = false)
}
const onClickThat = async () => {
const response = await letsbehere5seconds()
if (!alive.current) return
setSomeState('hey')
}
}