问题标签 [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 回答
1988 浏览

reactjs - useCallBack react-hooks/exhaustive-deps 警告

这是我在 React js 中的代码的一部分:

我有 isFieldsOK 状态,它告诉我我的字段是否有效,我希望它“监听”注册功能中的每一个变化。运行此程序后,我收到此警告:

我的代码到底有什么问题?我应该改变什么,为什么?谢谢!

0 投票
1 回答
534 浏览

reactjs - 将函数转换为使用回调

我想重写一个函数,如:

对于 ReactuseCallback形式的首选,我最好的猜测是:

我得到的错误:

不能在回调中调用 React Hook “useLocation”。React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用 react-hooks/rules-of-hooks

这是否意味着我不能将我的功能转换为useCallback

0 投票
2 回答
2841 浏览

reactjs - 具有依赖关系的 useCallback 与使用 ref 调用函数的最后一个版本

在进行代码审查时,我遇到了这个自定义钩子:

这个钩子是这样使用的:

基本上,与const f = useCallBack(() => { // do stuff }, [dep1, dep2])此相比,避免声明依赖项列表并且f永远不会更改,即使其中一个依赖项发生更改。

我不知道如何看待这段代码。我不明白使用useLastVersion相比有什么缺点useCallback

0 投票
2 回答
707 浏览

javascript - React useCallback() 和 useEffect on event-handler 不断重新渲染

我正在学习 helinski fsopen20 的反应。其中一个练习需要单击一个按钮并显示该按钮绑定区域的天气。

该按钮有一个 onClick 事件,该事件将区域索引作为参数来确定选择哪个区域(显然)。

OnClick 函数然后呈现所述区域的详细信息。需要获取的数据是在这个函数内部完成的

我能够实现我想要的,但它需要大量的重新渲染。

最初使用 axios get() 没有 useEffect 或 useCallback 导致无限重新渲染令我惊讶的是,

我试过 useEffect 和 useCallBack() 但没有什么能阻止重新渲染。

在旁注中,我在我的 App 组件中使用了不同的 useEffect ,它渲染一次就好了。

如何正确使用 useEffect 和 onClick 等事件处理函数?

下面是完整的代码:

0 投票
2 回答
552 浏览

javascript - 为什么`useCallback`不能总是返回相同的引用

我不明白为什么useCallback每次更新一个部门时总是返回一个新的参考。React.memo()它导致许多本可以避免的重新渲染。

如果有的话,这个实现的问题是useCallback什么?

使用它而不是内置实现肯定会对性能产生重大的积极影响。

自己的结论:

只要您了解其含义,就没有理由不使用使用 ref 的实现而不是内置的setTimeout,即,正如@Bergy 所指出的,您不能存储回调以供以后使用(例如,在之后)并期望回调具有与同步调用它相同的效果。
然而,在我看来,这是首选行为,因此没有缺点。

0 投票
1 回答
260 浏览

reactjs - useCallback 在列表项组件中而不是在父项中

我创建了一个反应应用程序,其中有一个带有删除操作的项目列表。我知道,如果我从父级(项目容器)传递此删除操作,我可以在父级中使用“useCallback”来防止删除方法的不必要重新创建。

但是,如果在 item 组件中定义了 delete 方法并在其中使用了“useCallback”会发生什么?它行不通吗?它不会使用相同的记忆方法而不每次都创建一个新方法吗?

换句话说,记忆的范围是什么?是全球性的吗?还是每个组件?

伪代码:

谢谢

0 投票
2 回答
285 浏览

javascript - 如何在 useEffect 中包含缺少的依赖项但防止函数的无限循环执行?

0 投票
1 回答
147 浏览

reactjs - 使用反应钩子跨组件携带页面上下文/状态

我是反应钩子的新手。我们正在开发一个没有 redux 的基于反应的应用程序。我们只有一个页面,其中有不同的组件,如搜索、过滤器、网格、分页等。

每当我们在 page 上执行任何操作时,Grid 都应该使用该操作道具刷新。

例如,当我在页面上进行搜索时,网格应该使用搜索道具刷新。我在页面上应用任何过滤器,网格也应该使用过滤器道具和搜索道具刷新。

因此,所有单个组件中的所有操作状态都应该可用,以使用适当的道具来调用网格刷新 api。

您能否帮助我了解我们如何在每个组件级别维护整个页面的状态。

0 投票
2 回答
1561 浏览

reactjs - 带有回调的 useState 不更新 useCallback 依赖项

我在这里做了一个工作示例: https ://codesandbox.io/s/magical-flower-o0gyn?file=/src/App.js

当我单击隐藏按钮时,我想将更新的数据保存到本地存储:

  1. 我单击第一列上的隐藏:setValueWithCallback运行,将回调设置为 ref 并设置状态
  2. useEffect开始,使用更新的数据调用回调
  3. saveToLocalStorage被调用,在一个useCallback设置data为依赖

问题出在第 3 步,保存到本地存储的内容{visible: true}适用于两者。我知道如果我改变这一行:

对此:

它有效,但我无法理解,为什么第一个没有。我认为它一定是一些关闭的东西,但我没有看到它。

如果data已经更新,并useEffect运行了回调,为什么它没有在依赖数组中更新?是的,这个例子很奇怪,第二个解决方案很好,我只是想演示这个问题。谢谢您的帮助!

0 投票
1 回答
35 浏览

reactjs - React 中的 useCallback 似乎不允许我更新父级中的状态

我创建了一个简单的示例,说明如何useCallback不允许我保留状态更改。当我删除 useCallback 时,我存储在状态中的计数器会按预期更新,但是添加 useCallback(我希望这会使所有扬声器项目的重新渲染不重新渲染)不断将我的状态重置为原始状态(0,0 ,0)。

问题代码在codesandbox中:

https://codesandbox.io/s/flamboyant-shaw-2wtqj?file=/pages/index.js

这是实际简单的一个文件示例