问题标签 [use-effect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
135439 浏览

reactjs - 一般来说,在单个组件中使用一个或多个 useEffect 挂钩更好吗?

我有一些副作用要应用到我的反应组件中,并且想知道如何组织它们:

  • 作为单一的使用效果
  • 或几个 useEffects

在性能和架构方面哪个更好?

0 投票
1 回答
890 浏览

reactjs - React hooks exhaustive-deps 规则也需要 useEffect 数组中的函数

所以我有以下效果

disabled如果prop 发生变化,这只是将按钮设置为启用或禁用状态。

我还在我的 eslint 配置中添加了以下规则

现在我收到一个警告,setAnimatedValue需要useEffect与 prop 一起添加到我的数组中disabled,但它只是一个既不是状态也不是 prop 的函数,所以据我所知,它不应该真正进入那里。

有没有办法让这条规则只在我遗漏stateprop有价值时才发出警告?

0 投票
1 回答
6993 浏览

reactjs - 使用 react useEffect 钩子和 Redux 加载微调器并且没有 useState 钩子

我的组件需要一个加载微调器。我正在使用反应钩子useEffect,因为我正在使用redux,所以我不能useState在这个组件中使用。

这是我到目前为止所得到的,它没有按预期工作。

注意:我试过useRef了,我没有得到答案。

注意:我可以使用类组件来实现解决方案,如下所示。跟随isLoading

但我的问题是重写整个事情有useEffect()没有 useState()

0 投票
0 回答
1155 浏览

reactjs - 如何修复 useEffect 钩子抛出的“未捕获的 TypeError:回调不是函数”

我对 useEffect 挂钩有疑问。在下面的代码中,第一个效果会触发一个初始化 firebase 的 redux 操作,如果有用户登录,它会将其数据放入 redux 存储中。这会触发组件中的更新,第二个效果尝试重新运行,我得到控制台日志,但也得到“回调不是函数”错误。之后,initFinished 属性设置为 true,所以效果会再次触发,这次我得到的只是错误。

日志

我尝试从效果的依赖数组中添加/删除 deps。我总是得到同样的行为。即使效果中的唯一代码是 console.log,行为也保持不变。效果第一次运行,第二次出错。

组件代码

依赖项:

0 投票
2 回答
36556 浏览

reactjs - 在此错误消息中“直接在 useEffect 中移动此变量”是什么意思?

我试图通过道具将对象传递给子组件。该值在 useEffect 挂钩中设置,并在传递给我的子组件时丢失。

我尝试在单独的函数中设置 useEffect 挂钩之外的对象的值,但该值仍然丢失。

我希望 props.users 是 { user: 'bob' } 而不是空对象 {}。

错误信息是:

“每次渲染后,从 React Hook useEffect 中分配给 'users' 变量的赋值都会丢失。要随着时间的推移保留该值,请将其存储在 useRef Hook 中并将可变值保留在 '.current' 属性中。否则,您可以将此变量直接移动到 useEffect react-hooks/exhaustive-deps"

0 投票
0 回答
1385 浏览

javascript - 在 useEffect 挂钩中使用 redux 动作创建器

我想用来useEffect触发 2 个函数(它们是 redux 操作创建者) - 一个函数在组件安装时,另一个在卸载时,如下所示:

它可以工作,但是react-hooks/exhaustive-depseslint 规则告诉我我useEffect有 2 个依赖项,我应该将它们包含到依赖项数组中(useEffect 的第二个参数)或完全删除数组。第二个选项不合适,因为我不需要在每次渲染时调用这些函数。因此,我需要将它们都包括在内。有一篇关于将函数包含到依赖数组中的文章。那里描述的事情对我来说非常清楚,但我仍然对依赖数组中的 redux 动作创建者以及 react 如何对这些函数进行浅显的比较感到困惑。对我来说,这有点难以理解。解决这种特殊情况的正确方法是什么? 一般而言,在 useEffect 中使用 redux 动作创建者的正确方法是什么?

0 投票
1 回答
520 浏览

reactjs - Reactjs 为什么 useEffect 有时会在每个挂载/渲染上运行而不是首先运行

我在 App.js 的路线中有一个 useEffect

在同一个文件(App.js)中,我们有这样的组件(使用 react-localize-redux):

问题是我单击的每个链接都会运行 setActiveLanguage,即使我[]让它只在第一次渲染时运行(因为这是我唯一关心从 URL 设置语言的时间)我在应用程序的其他部分也遇到了这个问题。据我了解,useEffect 不应该在每次安装组件时都运行,除非它的依赖项发生变化,但似乎我错过了一个细节。

0 投票
3 回答
1947 浏览

reactjs - 不使用 useEffect Hook 来获取 API 是错误的吗?

我一直在这样做,但一些大学告诉我应该使用useEffectHook。问题是我没有看到这种方法的好处,我认为我的方法更干净。

根据回复编辑:

我将代码更改为重新渲染,如下所示:

在控制台中我得到:

called from UseEffectlessComponent called from UseEffectComponent called from UseEffectlessComponent called from UseEffectlessComponent called from UseEffectlessComponent

所以,我终于发现了这种方法的好处。我有一些代码要更改...非常感谢您的回答!

0 投票
3 回答
24095 浏览

reactjs - React - useEffect hook - componentDidMount to useEffect

我想把它转换成一个useEffect钩子:

代码

更新代码

现在它给了我一个useState cannot be used in a callback.

我该如何解决这个问题或正确转换它?

0 投票
2 回答
12386 浏览

reactjs - 使用反应钩子时无法读取未定义的属性

我收到错误“无法读取未定义的属性 'map'”,但无法找出原因 - map 无法工作,因为 'movies' 未定义。你能看出我做错了什么吗?非常感谢。