需要关于在reactHooks
中的功能组件中具有功能的建议
据我调查,许多人说这是一种不好的做法
因为每次调用re render时,它都会创建嵌套/内部函数。
经过分析,
我发现我们可以在元素上使用onClick={handleClick.bind(null,props)}
,并将函数放在函数组件之外
例如:
常量HelloWorld=()=>;{
函数handleClick=(事件)=>{
日志(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(()=>{
console.log(“clicked”,props.foo)
},[props.foo])
返回<;button onClick={onClick}>;Text<;/button>;
}
后者的唯一区别是,React doen的
如果props.foo
保持不变,请单击按钮上的onClick
。
更改回调是一个非常便宜的操作,一点也不便宜
值得让您的代码复杂化,以获得理论上的性能改进
另外,值得注意的是,在每次渲染时仍会创建一个新函数
即使使用useCallback
,但useCallback
也会返回旧的
只要作为第二个参数传递的依赖项保持不变
为什么要使用useCallback
使用useCallback
的要点是,如果将两个函数与引用进行比较
等式,fn===fn2
仅当fn
和fn2
指向内存中的相同函数时才为真。
函数是否相同并不重要
因此,如果您有备忘录或只有在函数更改时才运行代码,
使用useCallback
再次使用相同的函数可能会很有用
例如,React钩子比较新旧依赖项,可能使用Object.is
另一个例子是React.PureComponent,它仅在道具或状态发生更改时才会重新渲染。这对于使用大量资源进行渲染的组件非常有用。例如,在每次渲染时将新的onClick
传递给PureComponent,将导致它每次都重新渲染