问题标签 [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 投票
0 回答
106 浏览

reactjs - 当函数依赖于它设置的值时,如何使用 useEffect 防止无限循环?

我有一个 React 组件,它向后端发出请求以获取交易列表。涉及分页,因此有效负载将返回一个游标,可以在下次发出请求时使用。

我的问题是每次从后端收到有效负载时我都会设置光标,但该光标值位于挂钩依赖项中。这使得效果再次运行。

如何绕过这个无限循环?

0 投票
1 回答
364 浏览

reactjs - 反应超时和清除超时

我有一个未设置为组件的 React 页面。我正在寻找使用 React HooksuseEffect或任何其他建议。基本上我需要清除我的超时。

0 投票
1 回答
6169 浏览

reactjs - 如何在子组件中使用 useEffect() 来获取数据?

useEffect我想知道仅当子组件包含在父组件中时才在子组件内部使用来加载数据是否有意义(或可能) 。

在子组件中,我有以下代码:

但这不会触发任何呼叫。

您是否建议我获取父组件中的所有数据?我不想这样做以避免加载未使用的数据。有什么建议么?

0 投票
2 回答
731 浏览

reactjs - React Hooks:确保 useEffect 仅在自定义挂钩的数组参数内容更改时运行的惯用方法

我在 React 中创建了一个自定义钩子,它为给定的一组事件设置了一个事件侦听器。存在一组默认事件,并且此自定义钩子的使用者预计不会在大多数用例中自定义这些事件。通常,我希望在安装组件时添加事件侦听器,并在卸载组件时将其删除。但是,遵循钩子(和eslint(react-hooks/exhaustive-deps)lint 规则)的原则,我希望优雅地处理对要监视的事件列表的更改。使用 React 钩子实现这一目标的最惯用的方法是什么?

假设我只想删除所有事件侦听器并在事件列表更改时重新添加它们,我可以尝试以下操作:

不幸的是,这将无法按预期运行。请注意,我想为events参数提供默认值。使用当前方法执行此操作意味着events每次自定义挂钩运行时都指向不同的引用,这意味着效果每次也会运行(由于浅层依赖比较)。理想情况下,我想要一种使效果取决于数组内容而不是引用的方法。实现这一目标的最佳方法是什么?

0 投票
0 回答
100 浏览

reactjs - 为什么在 useEffect() 内部使用时 setTimeout() 不起作用并按预期返回值?

我正在做一个倒计时。简而言之,这个时钟将允许用户选择时间,当按钮启动时,它会倒计时。点击暂停会停止倒计时,取消会回到选择状态等。代码很大所以我放在这里

这个应用程序的问题是,当我点击“暂停”时,倒计时不会立即停止。它在停止之前仍然倒计时一个数字(例如,当在 5 处暂停时,它仍然倒计时到 4 并在 4 处停止)。

我试图找到错误,我猜错误仍然存​​在于components/time/index.js. 下面是文件

这段代码在这部分表现得很奇怪useEffect(),我猜这是错误的根源。奇怪的第一件事是setTimeout()那里返回的不是整数,而是一个相似的对象 - 根据这个
我尝试的另一件事是更改setTimeout()setInterval(). setInterval()在这种情况下,返回一个整数 - 也反对文档,因为它应该与setTimeout(). 更不用说使用setInterval()使我们无法停止倒计时工作 - 按钮不起作用

这段代码中的第二个奇怪的事情是clearTimeout()第一次调用时不起作用,然后下次调用。我试图跟踪执行的进度,当点击暂停时,它确实通过了clearTimeout()并且没有通过setTimeout(),但是超时并没有停止。我猜当点击暂停时传递给它的 timeoutID 会改变,但是当我注销该 ID 时它根本没有改变。

所以我被困在这里。猜猜它可以使用async/await解决,但我想知道为什么上面的这种方法会给出奇怪的结果。我还想知道如何修复这些错误以使应用程序按预期工作。谢谢

0 投票
3 回答
29325 浏览

javascript - 获取 api 时未调用 useEffect 且未更新状态

我正在使用 useEffect 钩子从天气 api 获取数据并正确声明依赖关系。我的状态仍未更新,因此我的渲染函数出现错误。从摆脱依赖数组到在依赖数组中声明倍数,我几乎尝试了一切。我不知道我的功能有什么问题。API 的 JSON 响应格式如下:

这就是我的代码的样子:

我希望能够显示图标的图像,但我在渲染函数中收到此错误消息:

console.log(weather)返回 null,即使它在 useEffect() 之后被调用并且console.log(useEffect called)根本没有记录,这意味着 useEffect 没有被调用。

0 投票
1 回答
9810 浏览

reactjs - React 钩子 useEffect 调用 API 第二次和第一次调用 API 响应也返回

我正在使用 useEffect 获取 API,并且 API 响应正确,例如

第二次当我收到下一个 API 调用响应时,如果有错误,那么旧的响应不会被删除。它是这样显示的

我为获取 API 编写了本教程代码

检查我在代码沙箱中的确切代码

默认打开控制台并检查res对象。现在单击API Call按钮并再次检查res对象。当我null在开始时使用 useState 时,为什么会显示旧状态?

0 投票
0 回答
81 浏览

react-hooks - eslint rule warning useEffect

How is the rigth way to write this effect

this code works only has a eslint warning, I considered that is good to ignore

0 投票
1 回答
1242 浏览

socket.io - 如何使用钩子将项目附加到 React 组件中的数组?

我正在尝试使用 Socket.io 和 React (hooks) 建立一个聊天室。我有向服务器发出和从服务器发出的事件,但是当我尝试messages在客户端更新我的数组时,该数组会不断被替换,而不是更新。

客户端(反应)

同样,从服务器成功接收到消息,但我的messages阵列中只有一个项目 - 最新消息。我认为使用扩展运算符(即setMessages([...messages, msg]))会保留其他数组项。我没看到什么?

0 投票
1 回答
544 浏览

reactjs - 如何测试(断言)使用钩子的 React 组件的中间状态

这个问题是关于:如何测试使用useEffect钩子和useState钩子的组件,使用react-testing-library.

我有以下组件:

当我渲染这个应用程序时,我看到的行为如下:

  1. 该应用程序最初呈现0
  2. 大约 2 秒后,应用程序呈现1

现在,我想使用 and 来测试和断言这种react-testing-library行为jest

这是我到目前为止所拥有的:

测试通过。但是,我还想断言用户最初看到应用程序呈现的事实0(在12 秒后呈现之前)。

我怎么做?提前致谢。