React钩子中功能组件内部的功能-性能

需要关于在reactHooks中的功能组件中具有功能的建议

据我调查,许多人说这是一种不好的做法
因为每次调用re render时,它都会创建嵌套/内部函数。
经过分析,

我发现我们可以在元素上使用onClick={handleClick.bind(null,props)},并将函数放在函数组件之外

例如:

常量HelloWorld=()=>{
函数handleClick=(事件)=&gt{
日志(event.target.value);
}
返回(){
<>
<input type=“text”onChange={handleClick}/>
</>
}
}

请告知是否有其他方法

提前谢谢

别担心

不要担心在每个渲染上创建新函数。只有在边缘情况下,这才会妨碍您的性能。
设置onClick处理程序不是其中之一,所以只需在每个渲染上创建一个新函数

但是,当您需要确保每次都使用相同的函数时,可以使用useCallback

为什么不将useCallback用于onClick

这就是为什么您不应该为onClick处理程序(以及大多数其他事件处理程序)使用useCallback的原因

考虑以下代码段,其中一段没有useCallback:

函数Comp(props){
返回<button onClick={()=>console.log("clicked",props.foo)}>Text</button>
}

还有一个是useCallback:

函数Comp(props){
const onClick=useCallback(()=&gt{
console.log(“clicked”,props.foo)
},[props.foo])
返回<button onClick={onClick}>Text</button>
}

后者的唯一区别是,React doen的
如果props.foo保持不变,请单击按钮上的onClick
更改回调是一个非常便宜的操作,一点也不便宜
值得让您的代码复杂化,以获得理论上的性能改进

另外,值得注意的是,在每次渲染时仍会创建一个新函数
即使使用useCallback,但useCallback也会返回旧的
只要作为第二个参数传递的依赖项保持不变

为什么要使用useCallback

使用useCallback的要点是,如果将两个函数与引用进行比较
等式,fn===fn2仅当fnfn2指向内存中的相同函数时才为真。
函数是否相同并不重要

因此,如果您有备忘录或只有在函数更改时才运行代码,
使用useCallback再次使用相同的函数可能会很有用

例如,React钩子比较新旧依赖项,可能使用Object.is

另一个例子是React.PureComponent,它仅在道具或状态发生更改时才会重新渲染。这对于使用大量资源进行渲染的组件非常有用。例如,在每次渲染时将新的onClick传递给PureComponent,将导致它每次都重新渲染

发表评论