问题标签 [usecallback]

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 投票
2 回答
2425 浏览

reactjs - 如何使用 Hooks API 在 React 中避免不必要的渲染

请按照下面的代码片段,当我单击任何按钮(添加、编辑、删除)时,我的所有组件都会重新渲染,包括Title没有props或的组件stats。如果我有几个组件可能没问题,但假设我有超过15 个或更多的组件来获取/保存数据,这样可以还是应该避免?

我尝试使用useCallback钩子(使用handleRemove),但显然这不能按预期工作。

0 投票
0 回答
143 浏览

reactjs - 如何获取导致 useCallback / useMemo 重新计算的依赖关系?

通过在 React 中使用useMemo/ hook,有时我会发现/返回值useCallback导致的许多意外渲染。useMemouseCallback

当我React.memo用来减少 React 函数组件无用的渲染时,通过React.memo第二个参数,我可以控制比较。另外,我可以得到哪个道具导致当前渲染。就像之后:

我可以像以前一样获得哪个依赖原因useCallback/useMemo重新计算或 React devtools 吗?

0 投票
1 回答
3730 浏览

reactjs - UseEffect 和 useCallback 仍然会导致 React 项目中的无限循环

我似乎无法解决我的反应项目中的无限循环问题。

我正在开发一个每日日志反应应用程序。让我简要解释一下这个项目。这是快速查看的代码图片:

这是用于快速查看的代码图片

底部提供了相同的代码。

结构(从上到下)

  1. DailyLog组件有一个表单,该表单使用Question传递道具的组件。
  2. Question组件使用道具来显示问题和描述。它还包含一个Input组件,props 被进一步传递到该组件中。
  3. Input组件获取道具并呈现适当的表单输入字段。

逻辑(从下到上)

  1. Input组件处理它自己的inputState. 当用户输入某些内容并onChangeHandler触发时,状态会发生变化。
  2. Input组件还有一个useEffect()钩子,该钩子调用onInput()作为道具从DailyLog.
  3. onInputHandler()组件中的更新DailyLog包含formState所有输入字段值的表单范围状态。根据formState当时填写的输入字段进行修改。
  4. 使用应该停止由任何父/子重新渲染引起的无限循环onInputHandler()的钩子。useCallback()但它不起作用:皱眉:

代码有什么问题?我在这里想念什么?下面提供的代码:

0 投票
2 回答
4318 浏览

reactjs - React useCallback 在第一次更改时不更新状态 onChange

我正在尝试创建一个搜索下拉列表,但我的搜索过滤器没有正确更新useCallback。searchFilter 回调不会在第一次更新值onChange

我可以通过取消回调来修复这个错误:

我的实施有什么问题useCallback

我什至尝试将 a 添加ref到逻辑中,但这没有用。我在 React 文档中阅读了他们喜欢使用 refs 的许多输入更改:

** 注意我尝试添加一个 JS 片段,但似乎我还不能将反应钩子添加到 stackoverflow。需要处理 React 16.8+ 版本。如果有办法我可以做到,请告诉我。

0 投票
1 回答
670 浏览

javascript - React 功能组件不会随着值的变化而改变

我为重置密码页面制作了一个反应组件。重置令牌发送到用户邮箱后,重置页面有三个输入:令牌、新密码和确认密码。后两者是隐藏的,直到sha256 token在令牌字段中输入 a,密码字段出现,令牌字段消失。这曾经有效,直到我还在重置 URL 中转发了带有重置令牌的 URL。因此我不得不compShow()在我的useEffect()同样,一旦组件加载,它就会检查令牌并更新令牌字段,使其不可见。这适用于带有重置令牌的 URL,但没有重置的 URL 应该首先仅显示令牌字段,然后隐藏令牌并显示密码字段现在无法按预期工作。只有在输入令牌后按一个额外的字符(我使用空格),令牌字段才会消失。我认为这是因为我第一次更改函数中placeholder状态变量的值时onChangedHandlercompShow()没有被触发。但是当我添加一个额外的字符时,该compShow函数会检测到的变化placeholder并执行其各自的代码。

有人能告诉我为什么会发生这种情况,我应该怎么做才能得到预期的结果?

下面提供了代码片段

0 投票
2 回答
5150 浏览

reactjs - 如何正确使用 React `useCallback` 的依赖列表?

我有一个这样的例子:

密码箱

我想在回调中修改一个状态值,然后使用新的状态值来修改另一个状态。

但是,在调用此处理程序后,count已成功增加,但text没有。

你们能帮我理解为什么会这样吗?以及如何干净地避免它?

谢谢!

0 投票
2 回答
335 浏览

reactjs - 如何更新事件的 useCallback 挂钩

我需要更新 eventEmitter3 发出的某个事件的 useCallback 挂钩。现在我用当前时间更新本地状态以触发 useCallback。这行得通,但看起来很复杂。有更好的解决方案吗?

0 投票
1 回答
960 浏览

javascript - 跨多个组件重用 React.useCallback() 函数

我有一些组件都在onPress处理程序上调用相同的函数,假设它如下所示:

我想将此功能移到组件之外,以便我可以重新使用它,我认为它看起来像这样:

但是,它有一个依赖项dispatch,我需要传入并添加到依赖项数组中。

我怎样才能打破这个功能以供重用,同时还能从中获得性能提升useCallback

0 投票
1 回答
4075 浏览

javascript - useCallback Hooks 获取旧状态值而不更新

我的回调在一次又一次调用后返回相同的状态

我是反应类中的反应钩子的新手,我本可以使用 shouldcomponentupdate 并且可以解决这个问题

但是 usecallback 钩子中没有参数

我怎么解决这个问题?我已阅读官方文档,但在那里找不到任何相关问题

0 投票
1 回答
637 浏览

reactjs - 如何防止在 ReactJS 中使用回调作为道具重新渲染?

我正在通过使用 TypeScript重构本教程中的代码来练习 ReactJS 中的新钩子功能。

我正在将一个回调从父组件传递给一个子组件,该子组件抛出了必须在单击按钮事件上执行的道具。

我的问题是:当游戏获胜时,我有一个警告对话框出现两次而不是一次。我认为这是由组件重新渲染引起的,所以我使用useCallback钩子来记忆handleClickOnSquare回调。问题是,警报对话框仍然出现两次。

我想我错过了与重新渲染有关的东西,有人知道可能导致这种行为的原因吗?

这是我的代码:

游戏.tsx

类型.d.ts

谢谢