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

react-native - 使用 useEffect 重新渲染屏幕

我在这个问题上堆积了很长时间,需要一些帮助来解决它。

我正在构建一种销售应用程序,并尝试在一个页面中设置所有内容,以便用户可以获得他的成就与他的目标

在这个屏幕中,我试图设置一张桌子。除了代码假设设置要运行的表格内容外,一切正常。尽管我尽了最大努力让它在用户通过屏幕后重新渲染,但它一直没有重新渲染,我必须手动重新渲染

如果完成屏幕不断重新渲染导致应用程序崩溃。我确定这是我的代码中的一个问题

任何人都可以解决这个问题,我将不胜感激

0 投票
2 回答
497 浏览

reactjs - 我不明白 useCallback

我需要更改复选框的选中状态,但 useCallback 会多次重新渲染组件。我不明白它是如何工作的。我已经阅读了很多关于它的材料。

重新渲染的数量:

重新渲染的数量

0 投票
2 回答
821 浏览

reactjs - 如果使用 React.memo,则 Parent 中的 React useCallback() 函数只能与 Child 正常工作,没有它不起作用,任何帮助?

父组件

父组件包含在更改时将状态设置为“本地”的输入,以及在单击时获取此“本地”状态的值并将其设置为“sendLocal”的按钮

功能

  1. changehandler :触发输入类型更改。

  2. sendLocalValue :将“本地”值放入“sendLocal”变量中,单击按钮时触发。

  3. sendValue :这个带有依赖“sendLocal”的记忆函数作为子组件中的道具传递,一旦孩子被渲染,就会触发。

子组件

getValue prop 调用 parent 的memoized "sendValue" 函数,该函数返回 sendLocal 的值。

问题

一切正常,子组件仅在单击按钮时“sendLocal”值发生变化时呈现,但如果我删除子组件中的 React.memo(),即使使用了 useCallback(),组件在输入类型上的呈现也会发生变化,为什么

0 投票
1 回答
225 浏览

reactjs - React Hooks useCallback 依赖无限循环

我目前在组件安装时获取我的数据一次,然后在用户单击按钮时获取。但是,如果请求正在进行中,我想停止获取按钮,这就是我更新isFetching状态的原因。

但是,我需要将 添加isFetchinguseCallback依赖项以删除警告,如果这样做,则会触发无限获取循环。

这是我的代码:

我知道有多个像这样的问题,但我无法删除警告或无限循环,同时仍在检查组件是否已安装。

以下是一些示例:example-1example-2

0 投票
1 回答
316 浏览

react-native - 如何使用useEffect和useCallback,让屏幕在按钮点击前不调用该函数

我正在学习 useEffect 和 useCallBack 钩子。我要做的是在 useCallBack 中添加一个函数,并确保在我单击按钮之前屏幕不会调用此函数。下面是我的示例代码。目前,它会在我单击按钮之前调用 useEffect 中的函数。我的目标是单击按钮,然后使用 useCallBack 函数触发 useEffect 函数。还是新手,感谢您的帮助。

0 投票
2 回答
661 浏览

reactjs - 在useEffect内部获取的useCallback用法不正确-ReactJS

我想实现以下目标。动作从redux被导入到这个组件中。它从 firebase 数据库中获取数据。数据显示在此组件内。

我的问题是由于优化,每次安装组件时都会获取数据。我想阻止这种行为。我希望这仅在第一次渲染组件时获取,不再获取。当然,它应该在数据更改时获取,否则不会。我用过useCallback,但下面的代码肯定有错误。用户通过身份验证时会传递 Token 和 Id。

0 投票
3 回答
471 浏览

react-native - React Native - 如何从 Header 提交 Formik

我是 Formik 和 React Native 的新手。目前,我的目标是通过 Navigation 标头提交表单。我发现的所有示例都是从屏幕页面本身提交表单。我需要帮助弄清楚如何正确使用handleSubmitonSubmit属性以及setParams将值正确传递给导航标题。

现在,我无法将表单中的值发送到 useCallBack 挂钩。

0 投票
3 回答
6274 浏览

reactjs - useRef、useMemo、useCallback 钩子的生产用例是什么?

除了在许多 YouTube 教程视频中看到的例之外,和的实际/现实用例是什么?useMemouseCallback

另外,我只看到了钩子的输入焦点示例。useRef

请分享您为这些钩子找到的其他用例。

0 投票
1 回答
103 浏览

javascript - 如何访问 setState 回调之外的最新状态?

由于 React 的异步特性setState以及经过大量研究后新引入的react 并发模式,我不知道在以下场景或任何其他场景中如何访问保证的最新状态。

非常感谢 React 专家的回答,尤其是来自 React 团队的回答。

请记住,这是一个非常简单的示例,真正的问题可能发生在一个充满状态更新、事件处理程序、改变状态的异步代码的复杂项目中,......

你可能会说我可以onIncrementsetCount回调中调用,但是由于新的反应并发模式,你可以看到将来反应更新onIncrement可能会被调用两次并输出两次结果,这不是预期的结果。

提交阶段通常非常快,但渲染可能很慢。出于这个原因,即将到来的并发模式(默认情况下尚未启用)将渲染工作分成几部分,暂停和恢复工作以避免阻塞浏览器。这意味着 React 可能在提交之前多次调用渲染阶段生命周期,或者它可能在根本不提交的情况下调用它们(因为错误或更高优先级的中断)。

您已经可以(React 17 严格模式)看到onIncrement在开发模式和 React 并发模式成为默认后的特性中将调用两次,因此在生产中可能会以这种方式调用两次。

useCallback依赖项数组中包含 count 是否可以保证 count 是最新的状态值?

onIncrement您可能会建议在挂钩中调用,useEffect但这样我将无法访问以前的状态,与此示例不同,它可能无法重新计算。(使用 ref 存储先前的状态不是解决方案)

使用的另一个问题useEffect是我不确定这个事件处理程序(onIncrement)是效果的原因还是另一个处理程序中的状态更改或useEffect回调导致了效果。(存储额外的状态或参考来检测原因是多余的)

谢谢!

0 投票
0 回答
80 浏览

javascript - useEffect 和 useCallback 导致多次重新渲染

我正在处理我的一个小项目,就在部署之前,我使用的 API 进行了策略更改,以将 API 调用限制为一秒。这导致我遇到错误(错误 429:请求过多)。我的解决方法(因为 axios 在 header prop 之后没有重试是使用 fetch API 创建某种递归函数,如果它失败,它会再次调用)。所以,最初我得到了下面的代码块:

显然,它导致了如此多的重新渲染猜测,导致 useEffect 和 useCallback 中的一些依赖项都是实际的异步状态值。

决定将 fetchCall(没有 useCallback)扔到 useEffect 中,我最终得到了这个:

上面的代码按预期工作。然而,我不知道我忘记注释掉原始的 fetchCalls 函数(在 useEffect 之外),因为我只注释掉了依赖于 API 调用 fetchCalls 函数的第二组 API 调用。现在尝试将其注释掉会导致错误,指出未定义 fetchCalls 并且 fetchCalls 是不必要的依赖项。

但是请注意,在第二个代码块中,useEffect 中的 fetchCalls 承载了第二组 API 调用,这些调用依赖于 useEffect 中的 fetchCalls 函数应该进行的 API 调用。

现在我只想知道为什么它会这样工作,因为这对我来说似乎很奇怪。另外,我可以为此使用更可接受的解决方法吗?