Javascript 反应效果清理
我试图理解这个钩子: 钩子看起来像这样:Javascript 反应效果清理,javascript,reactjs,Javascript,Reactjs,我试图理解这个钩子: 钩子看起来像这样: 从'react'导入{useState,useffect,useRef}; //用法 函数App(){ //创建一个ref,添加到要检测外部点击的元素中 const ref=useRef(); //为我们的模式说明 常数[isModalOpen,setModalOpen]=useState(false); //调用钩子传递ref和一个函数来调用外部click useOnClickOutside(ref,()=>setModalOpen(false));
从'react'导入{useState,useffect,useRef};
//用法
函数App(){
//创建一个ref,添加到要检测外部点击的元素中
const ref=useRef();
//为我们的模式说明
常数[isModalOpen,setModalOpen]=useState(false);
//调用钩子传递ref和一个函数来调用外部click
useOnClickOutside(ref,()=>setModalOpen(false));
返回(
{伊斯莫达洛彭(
我的useEffect中的清理功能将在什么时候运行
从
React在组件卸载时执行清理
通过前面的学习,效果会在每次渲染时运行,而不仅仅是一次
这就是为什么React还会清除之前渲染的效果
下次运行效果
简而言之,清理功能在以下情况下运行:
- 组件卸载
- 再次运行
之前,请使用effect
我读过“当它是组件卸载时”,但我不知道这是什么意思,它们是什么意思
它们是指您使用此钩子的组件。在您的情况下,这就是App
组件
我的useEffect中的清理功能将在什么时候运行
从
React在组件卸载时执行清理
通过前面的学习,效果会在每次渲染时运行,而不仅仅是一次
这就是为什么React还会清除之前渲染的效果
下次运行效果
简而言之,清理功能在以下情况下运行:
- 组件卸载
- 再次运行
之前,请使用effect
我读过“当它是组件卸载时”,但我不知道这是什么意思,它们是什么意思
它们是指您使用此钩子的组件。在您的情况下,这就是应用程序组件。值得注意的是,这意味着:如果ref
或处理程序
更改,则清除回调将运行,效果函数将再次运行。ref
不会更改,假设它来自useRef
,但除非handler
被记忆化(通过useCallback
或usemo
或类似方式)@T.J.Crowder这一点很好,在useEffect
钩子的依赖项数组之前的UseClickOutside
钩子内的一条评论中也提到了这一点。应用程序组件是否曾经卸载过?@Kevin。当您将另一个组件呈现到根容器中时,它可以卸载。当从DOM中删除组件时,它被视为已卸载。值得注意的是,这意味着:如果ref
或handler
更改,则清除回调将运行,效果函数将再次运行。ref
不会更改,假设它来自useRef
,但除非handler
已被记忆(通过useCallback
或usemo
或类似方式)@T.J.Crowder这一点很好,在useEffect
钩子的依赖项数组之前的UseClickOutside
钩子内的一条评论中也提到了这一点。应用程序组件是否曾经卸载过?@Kevin。当您将另一个组件呈现到根容器中时,它可以卸载。从DOM中删除组件时,会将其视为已卸载。