问题标签 [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.
reactjs - 如何使用 Hooks API 在 React 中避免不必要的渲染
请按照下面的代码片段,当我单击任何按钮(添加、编辑、删除)时,我的所有组件都会重新渲染,包括Title
没有props
或的组件stats
。如果我有几个组件可能没问题,但假设我有超过15 个或更多的组件来获取/保存数据,这样可以还是应该避免?
我尝试使用useCallback
钩子(使用handleRemove),但显然这不能按预期工作。
reactjs - 如何获取导致 useCallback / useMemo 重新计算的依赖关系?
通过在 React 中使用useMemo
/ hook,有时我会发现/返回值useCallback
导致的许多意外渲染。useMemo
useCallback
当我React.memo
用来减少 React 函数组件无用的渲染时,通过React.memo
第二个参数,我可以控制比较。另外,我可以得到哪个道具导致当前渲染。就像之后:
我可以像以前一样获得哪个依赖原因useCallback
/useMemo
重新计算或 React devtools 吗?
reactjs - UseEffect 和 useCallback 仍然会导致 React 项目中的无限循环
我似乎无法解决我的反应项目中的无限循环问题。
我正在开发一个每日日志反应应用程序。让我简要解释一下这个项目。这是快速查看的代码图片:
底部提供了相同的代码。
结构(从上到下)
- 该
DailyLog
组件有一个表单,该表单使用Question
传递道具的组件。 - 该
Question
组件使用道具来显示问题和描述。它还包含一个Input
组件,props 被进一步传递到该组件中。 - 该
Input
组件获取道具并呈现适当的表单输入字段。
逻辑(从下到上)
- 该
Input
组件处理它自己的inputState
. 当用户输入某些内容并onChangeHandler
触发时,状态会发生变化。 - 该
Input
组件还有一个useEffect()
钩子,该钩子调用onInput()
作为道具从DailyLog
. onInputHandler()
组件中的更新DailyLog
包含formState
所有输入字段值的表单范围状态。根据formState
当时填写的输入字段进行修改。- 使用应该停止由任何父/子重新渲染引起的无限循环
onInputHandler()
的钩子。useCallback()
但它不起作用:皱眉:
代码有什么问题?我在这里想念什么?下面提供的代码:
reactjs - React useCallback 在第一次更改时不更新状态 onChange
我正在尝试创建一个搜索下拉列表,但我的搜索过滤器没有正确更新useCallback
。searchFilter 回调不会在第一次更新值onChange
我可以通过取消回调来修复这个错误:
我的实施有什么问题useCallback
?
我什至尝试将 a 添加ref
到逻辑中,但这没有用。我在 React 文档中阅读了他们喜欢使用 refs 的许多输入更改:
** 注意我尝试添加一个 JS 片段,但似乎我还不能将反应钩子添加到 stackoverflow。需要处理 React 16.8+ 版本。如果有办法我可以做到,请告诉我。
javascript - React 功能组件不会随着值的变化而改变
我为重置密码页面制作了一个反应组件。重置令牌发送到用户邮箱后,重置页面有三个输入:令牌、新密码和确认密码。后两者是隐藏的,直到sha256 token
在令牌字段中输入 a,密码字段出现,令牌字段消失。这曾经有效,直到我还在重置 URL 中转发了带有重置令牌的 URL。因此我不得不compShow()
在我的useEffect()
同样,一旦组件加载,它就会检查令牌并更新令牌字段,使其不可见。这适用于带有重置令牌的 URL,但没有重置的 URL 应该首先仅显示令牌字段,然后隐藏令牌并显示密码字段现在无法按预期工作。只有在输入令牌后按一个额外的字符(我使用空格),令牌字段才会消失。我认为这是因为我第一次更改函数中placeholder
状态变量的值时onChangedHandler
,compShow()
没有被触发。但是当我添加一个额外的字符时,该compShow
函数会检测到的变化placeholder
并执行其各自的代码。
有人能告诉我为什么会发生这种情况,我应该怎么做才能得到预期的结果?
下面提供了代码片段
reactjs - 如何正确使用 React `useCallback` 的依赖列表?
我有一个这样的例子:
我想在回调中修改一个状态值,然后使用新的状态值来修改另一个状态。
但是,在调用此处理程序后,count
已成功增加,但text
没有。
你们能帮我理解为什么会这样吗?以及如何干净地避免它?
谢谢!
reactjs - 如何更新事件的 useCallback 挂钩
我需要更新 eventEmitter3 发出的某个事件的 useCallback 挂钩。现在我用当前时间更新本地状态以触发 useCallback。这行得通,但看起来很复杂。有更好的解决方案吗?
javascript - 跨多个组件重用 React.useCallback() 函数
我有一些组件都在onPress
处理程序上调用相同的函数,假设它如下所示:
我想将此功能移到组件之外,以便我可以重新使用它,我认为它看起来像这样:
但是,它有一个依赖项dispatch
,我需要传入并添加到依赖项数组中。
我怎样才能打破这个功能以供重用,同时还能从中获得性能提升useCallback
?
javascript - useCallback Hooks 获取旧状态值而不更新
我的回调在一次又一次调用后返回相同的状态
我是反应类中的反应钩子的新手,我本可以使用 shouldcomponentupdate 并且可以解决这个问题
但是 usecallback 钩子中没有参数
我怎么解决这个问题?我已阅读官方文档,但在那里找不到任何相关问题
reactjs - 如何防止在 ReactJS 中使用回调作为道具重新渲染?
我正在通过使用 TypeScript重构本教程中的代码来练习 ReactJS 中的新钩子功能。
我正在将一个回调从父组件传递给一个子组件,该子组件抛出了必须在单击按钮事件上执行的道具。
我的问题是:当游戏获胜时,我有一个警告对话框出现两次而不是一次。我认为这是由组件重新渲染引起的,所以我使用useCallback
钩子来记忆handleClickOnSquare
回调。问题是,警报对话框仍然出现两次。
我想我错过了与重新渲染有关的东西,有人知道可能导致这种行为的原因吗?
这是我的代码:
游戏.tsx
类型.d.ts
谢谢