当前位置: 首页 > 知识库问答 >
问题:

仅在加载时调用方法一次

王刚毅
2023-03-14

我是胡克斯的新手,遇到了一些让我追自己尾巴的案例。

希望有人能解释或提供对我有意义的解决方案:

>

const useMountEffect = fun => useEffect(fun, [])

useMountEffect(() => {
  if (!isEdit) handleAddRow()
})

const handleAddRow = () => {
  let appendArr = [...listArr, '']
  setListArr(appendArr)
}

下面这个线程:如何调用加载函数与反应使用效果只有一次

我试着在没有依赖性的情况下使用useEffect,eslint不喜欢这样,他们建议添加一个“跳过下一行”,这似乎有点骇人:

// eslint-disable-next-line

共有2个答案

柴修筠
2023-03-14

它只在装载时运行一次,就像以前的componentDidMount一样

useffect()接受两个参数—函数和依赖项数组

useEffect(
    yourFunction, // <- function that will run on every dependency update
    [] // <-- empty dependency array
) 

dependency数组参数告诉它何时运行函数。如果依赖项没有更改,它将不会再次运行。如果依赖项确实更新,它将再次运行您的函数。

如果传入空数组(没有依赖项),则该函数将仅在挂载上运行。

React Hook useEffect has a missing dependency: 'xxx'. Either include it or remove the dependency array  react-hooks/exhaustive-deps

ESLint规则的原因是useffect()设计为在每次依赖项更新时运行,它希望您将所有依赖项添加到该数组中。

// eslint-disable-next-line react-hooks/exhaustive-deps
欧阳子石
2023-03-14

如果我是对的,您需要类似于componentDidMount生命周期方法的东西。方法是

function MyComponent(props){
    useEffect(()=>{
        // do stuff here...
    }, []) // <-- empty dependency array
    return <div></div>
}

要了解正在发生的事情,您需要了解use效应钩子是如何工作的。在没有任何依赖关系的情况下使用use效果钩子将在每次一些状态或道具更改并导致重新渲染时触发效果。但是如果我们传递一个空数组作为依赖,它将作为不依赖于任何其他东西的效果,所以它只会触发当组件挂载时。

 类似资料:
  • 问题是:我的MainActivity中的布局是在我有机会完成调用firebase以恢复应用程序数据之前生成的。如果我旋转屏幕,从而导致onCreate在MainActivity中再次运行,则生成的所有内容都正常。 在我的应用程序中,我有一个自定义的应用程序类实现,它对Firebase进行一系列调用,以恢复数据/确保数据始终同步。然而,我有大约20个ValueEventListeners,而不是几个

  • 我正在使用这种方法,但它不适用于第一个片段,但在从第二个片段滑动到第一个片段时,它工作良好。请帮我做这件事。谢谢

  • 让我给你一个关于系统如何工作的想法。 我使用JAAS登录模块进行登录和角色管理。我可以根据我的角色访问特定页面。 我在地址栏中输入我的url,点击回车键。 登录页面出现,正确登录后,它会将我重定向到正确的页面(现在我们称之为page1.jsf)。 我想在页面加载时调用服务器端方法。 你能帮我吗? **编辑** 假设我必须访问第1页。jsf,仅角色1可访问。 在地址栏中,我输入http://loca

  • 问题内容: 该useEffect阵营钩将运行在功能上传递的每一个变化。可以对其进行优化,使其仅在所需属性更改时调用。 如果我想从中调用初始化函数而不在更改时再次调用该怎么办?假设我要加载一个实体,但是加载功能不需要组件中的任何数据。我们如何使用钩子做到这一点? 使用钩子可能看起来像这样: 问题答案: 如果只想在初始渲染后运行给定的函数,则可以给它一个空数组作为第二个参数。

  • 我在运行时编译了一个java文件的文件系统,这是一个非常简单的类: } 现在我只想从我的项目中调用res方法(这将是一个jar),但我的代码生成 这就是我加载类的方式:

  • PrimeFaces 5.0、JSF 2.2、Glassfish 4.1.1、, 我假设我的设置中有些东西没有正确配置,但我不确定该看什么。。。 所以我使用managedbeans来支持JSF页面。在页面上的PrimeFace元素中,如果我使用oncomplete属性,它引用的方法将在页面加载时被调用。我不想让它在每次加载页面时调用这个方法,我也不认为应该这样! 我已经在几页和不同的元素中对此进行