Javascript 类组件与功能组件的渲染内部的箭头函数?性能方面

Javascript 类组件与功能组件的渲染内部的箭头函数?性能方面,javascript,reactjs,Javascript,Reactjs,如果在react类组件中声明arrow函数对性能有害, 为什么在功能组件中声明变量(箭头函数)具有更好的性能 React现在正朝着只使用功能组件的整个应用程序的方向发展,对于那些组件树很长,并且在每次更新时都会重新声明许多变量的大型应用程序,它不会有性能问题吗?(我知道有些是垃圾收集的,但声明仍然存在,就像在类组件的render函数中使用arrow函数一样) 类ReactComponent扩展React.Component{ render(){ 返回( console.log('do somet

如果在react类组件中声明arrow函数对性能有害, 为什么在功能组件中声明变量(箭头函数)具有更好的性能

React现在正朝着只使用功能组件的整个应用程序的方向发展,对于那些组件树很长,并且在每次更新时都会重新声明许多变量的大型应用程序,它不会有性能问题吗?(我知道有些是垃圾收集的,但声明仍然存在,就像在类组件的render函数中使用arrow函数一样)

类ReactComponent扩展React.Component{
render(){
返回(
console.log('do something')}>
console.log('pass function')}/>
);
}
}
常量函数组件=()=>{
const doSomething=()=>console.log('do something');
const passFunction=()=>console.log('pass function');
返回(
);
};
如果在react类组件中声明arrow函数对性能有害

人们警告您在每次渲染时创建函数的原因并不是因为创建函数太慢。不是,;创建函数非常快

当您将该函数传递给其他对象,并且其他对象正在使用shouldComponentUpdate或PureComponent或React.memo或useMemo或其他形式的备忘录时,就会出现性能问题。由于它收到了一个新函数,它认为它需要重新计算,因此它失去了记忆的好处

的确,这个问题也可能发生在函数组件中,但这是useCallback和useMemo的作用之一。您只能使用这些钩子创建一次函数,因此不会不必要地破坏其他组件的记忆。

没有什么“对性能有害”,只有不必要的计算。如果需要创建函数来表示程序的行为,那么没有什么“不好”的。如果可以避免创建函数,那么它只是“坏的”,如果可以避免大量计算,那么情况更糟

创建函数很便宜。它创建了一个新的函数对象,其中包含对函数代码及其环境的引用(“闭包”),因此函数表达式与对象文本没有太大区别。因此,创建函数并不“坏”,而且从来都不是

React中函数表达式产生的真正问题不是函数表达式本身,而是它的逻辑结果:

<div onClick={() => doStuff()}> Test </div>

请提供一个代码示例,以便我们可以根据提供的代码进行讨论。@Lazarofernandslimasuleman我添加了一个示例
<div onClick={() => doStuff()}> Test </div>
 const callback = useCallback(() => doStuff(), [doStuff]); // returns the same function, unless doStuff changes

 <div onClick={callback}> Test </div> <- only gets reattached when doStuff changes