![](/img/trans.png)
[英]How to write an ES6 class React Component that extends a functional component?
[英]Converting React ES6 class to functional component - what to use for private methods?
我正在将 React ES6 类样式组件转换为功能组件。 我有点不确定的一件事是如何最好地转换私有 class 方法。 据我所知,我应该将它们转换为功能组件 function 中的函数,因为它们需要在那里才能访问组件的 state。 然而,这大概意味着在每次重新渲染时,function 将被重新创建:
前
class Game extends React.Component {
handleClick(i) { if (this.state.foo) { ... } }
}
后
function Game {
function handleClick(i) { if (foo) { ... } }
}
这是性能方面的问题吗?如果是,有什么方法可以改善它吗?
此外,我读过的大多数指南都建议将箭头函数分配给变量,而不仅仅是声明函数,例如。
function Game {
const handleClick = (i) => { if (foo) { ... } }
}
这是纯粹的风格,还是有其他理由在常规嵌套 function 定义上使用分配的箭头函数?
您可以使用通过function
关键字或箭头 function 语法定义的函数。 在这种情况下,它并没有真正的区别。 但是,使用箭头语法,函数不会被提升,如果在定义之前使用 function,则可能会导致 linter 报告警告。
然而,这大概意味着在每次重新渲染时,function 将被重新创建
你是对的,如果你以任何一种方式定义函数,它们将在每次重新渲染时重新创建。 这是否是一个问题将取决于您的用例。
如果您在useEffect
回调中使用这样的 function 并将其添加到其依赖数组中,则效果将在每次重新渲染时重新运行(这可能不是您想要的)。 如果您将这样的 function 作为prop
传递给任何子组件,则该组件也将重新渲染。
您可以使用useCallback
React.memo
这些作为props
接收的任何子组件。 但是,您现在正在用重新渲染组件的成本来换取存储和比较props
的成本(React 会这样做,而不是您)。
所以真的,这取决于你的应用程序。 如果有问题的组件下面有一个大的组件树,那么使用useCallback
和React.memo
可能是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.