- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近正在使用 React Hooks 重构一个 Web 应用程序。我遇到了一个关于 useCallback
的问题.基于肯特的描述:https://kentcdodds.com/blog/usememo-and-usecallback , useCallback
就是给子组件传入相同的函数引用,避免子组件的重新渲染,让性能更好。但是,它与 React.memo
一起使用。 .正如肯特所说:
MOST OF THE TIME YOU SHOULD NOT BOTHER OPTIMIZING UNNECESSARY RERENDERS. React is VERY fast and there are so many things I can think of for you to do with your time that would be better than optimizing things like this. In fact, the need to optimize stuff with what I'm about to show you is so rare that I've literally never needed to do it ...
useCallback
通常?除非回调的创建成本很高,使用
useCallback
避免为每个渲染重新创建回调。
onClick
或
onChange
事件处理程序,2 行或更少,我们应该不使用
useCallback
把它包起来?
最佳答案
我找到 useCallback()
当我不希望函数引用改变时是必要的。例如,当我使用 React.memo
在某些子组件上,由于其方法之一通过 props 的引用更改而不应重新渲染。
示例:
在下面的示例中 Child1
如果 Parent 重新渲染,总是会重新渲染,因为 parentMethod1
每次渲染都会获得新的引用。和Child2
不会重新渲染,因为 parentMethod2
将保留其跨渲染的引用(您可以传递一个依赖数组以使其更改并在新输入值出现时重新创建)。
注:假设 Child
使用 React.memo()
存储组件
function Parent() {
const parentMethod1 = () => DO SOMETHING;
const parentMethod2 = useCallback(() => DO SOMETHING,[]);
return(
<React.Fragment>
<Child1
propA=parentMethod1
/>
<Child2
propA=parentMethod2
/>
</React.Fragment>
);
}
另一方面,如果
function
运行起来很昂贵,你可以使用
useMemo
来内存它的结果。钩。然后你只会在新值出现时运行它,否则它会给你一个使用这些相同值的先前计算的内存结果。
useCallback
Pass an inline callback and an array of dependencies. useCallback will return a memoized version of the callback that only changes if one of the dependencies has changed. This is useful when passing callbacks to optimized child components that rely on reference equality to prevent unnecessary renders (e.g.
shouldComponentUpdate
).useMemo
Pass a “create” function and an array of dependencies. useMemo will only recompute the memoized value when one of the dependencies has changed. This optimization helps to avoid expensive calculations on every render.
关于reactjs - react 钩子(Hook) : is `useCallback` not so needed usually?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58619943/
我正在优化应用程序的性能,我想知道是否对那些不依赖任何变量的函数使用 useCallback 钩子(Hook)。 考虑以下情况: 假设我们有一些功能: const someFunc = () => {
在我尝试更好地理解 React Hooks 的过程中,我遇到了一些我没有预料到的行为。我试图创建一个引用数组,并通过 onRef 函数推送到所述数组,我将传递给我的 's 。每次组件重新渲染时,数组都
我对 useMemo 还很陌生和 useCallback react 中的钩子(Hook),我有点不明白为什么即使我检查的变量保持不变,我的函数仍然继续重新渲染。目前我正在尝试构建一个谷歌地图,允许用
最近在研究react-hook。我在实践的过程中遇到了一个让我无法理解的问题。 import React, { useState, useCallback } from 'react'; const
根据 React 官方文档,如果组件新状态是使用先前状态计算的,则可以将函数传递给 setState。该函数将接收先前的值,并返回更新后的值。 考虑以下代码片段示例: const [counter,
为什么useCallback 钩子(Hook)会执行两次?我收到一条警告,建议我使用 useCallback,所以我正在尝试这样做。据我了解,useCallback 只会在我们传递给数组的对象更新时执
目前,每次更新查询参数时,我的代码都会重新呈现。一旦我删除了查询参数;但是,我收到一条警告,指出“React Hook useCallback 缺少依赖项:'query'。要么包含它,要么删除依赖项数
使用 React 的 useCallback hook 本质上只是 useMemo 的包装。专门用于函数,以避免在组件的 props 中不断创建新的函数实例。我的问题来自于当您需要将争论传递给从内存创
React 文档中关于 useMemo 的内容如下 You may rely on useMemo as a performance optimization, not as asemantic gu
在我读过的 React 文档 Pass an inline callback and an array of dependencies. useCallback will return a memoi
在我读过的 React 文档 Pass an inline callback and an array of dependencies. useCallback will return a memoi
什么时候应该使用 useCallback 什么时候应该使用简单的数组函数?或者也许我不应该使用第二种方法? const MyCompenent = (props) => { const handl
使用 React Hooks,当我们想要记住函数的创建时,我们有 useCallback 钩子(Hook)。这样我们就有了: const MyComponent = ({ dependancies }
我有接受函数作为参数的钩子(Hook)。如果功能发生不必要的更改,则可能会导致额外的重新渲染。我想确保函数用 useCallback 包装。 即这是一个简化版本: function useApi({
考虑这个带有自定义表单钩子(Hook)的基本表单字段组件来处理输入更改: import React, { useState, useCallback } from 'react'; const use
我正在检测组件中的按键,该组件知道当前通过 Prop 在应用程序的其他地方打开了什么对话框组件, currentDialog .通常我可以在嵌套函数中访问这个 Prop ,但在使用 useCallba
我正在学习 Advanced React Patterns with Hooks 在线类(class),在这个早期示例中,他们使用以下 API 创建了一个可扩展组件(比如经典的 Accordion 或
我是 React 的新手,我收到了这个错误: Warning: Can't perform a React state update on an unmounted component. This i
我的回调在一次又一次调用后返回相同的状态 我是 react 类中的 react 钩子(Hook)的新手,我本可以使用 shouldcomponentupdate 并且可以解决这个问题 但是 useca
下面的示例是一个简化的摘录,其中子组件根据鼠标行为发出事件。然后 React 应根据发出的事件更新 DOM。 function SimpleSample() { const [addons, se
我是一名优秀的程序员,十分优秀!