在花了一些时间学习 React 之后,我了解了创建组件的两种主要范例之间的区别。
我的问题是什么时候应该使用哪一个,为什么?一个相对于另一个的好处/权衡是什么?
ES6 类:
import React, { Component } from 'react';
export class MyComponent extends Component {
render() {
return (
<div></div>
);
}
}
功能:
const MyComponent = (props) => {
return (
<div></div>
);
}
我在想只要没有状态可以被该组件操纵就可以发挥作用,但是是这样吗?
我猜如果我使用任何生命周期方法,最好使用基于类的组件。
原文由 omarjmh 发布,翻译遵循 CC BY-SA 4.0 许可协议
新答案:在引入 React Hooks 之前,以下大部分内容都是正确的。
componentDidUpdate
可以用useEffect(fn)
复制,其中fn
是在重新渲染时运行的函数。componentDidMount
methods can be replicated withuseEffect(fn, [])
, wherefn
is the function to run upon rerendering, and[]
is an array of objects for组件将重新渲染,当且仅当自上次渲染以来至少有一个值发生了变化。由于没有,useEffect()
在第一次安装时运行一次。state
可以用useState()
复制,其返回值可以解构为状态的引用和可以设置状态的函数(即const [state, setState] = useState(initState)
) .一个例子可能会更清楚地解释这一点:顺便说一句,我听到很多人讨论出于性能原因不使用功能组件,特别是
虽然如此,但请考虑您的组件是否真的以值得关注的速度或体积呈现。
如果是,您可以使用
useCallback
和useMemo
钩子来防止重新定义函数。但是,请记住,这可能会使您的代码(微观上) 性能变差。但老实说,我从来没有听说过重新定义函数是 React 应用程序的瓶颈。过早的优化是万恶之源——当它出现问题时要担心这一点。
旧答案: 你的想法是对的。如果你的组件除了接受一些道具和渲染之外没有做更多的事情,那就选择功能性的。您可以将它们视为纯函数,因为在给定相同的 props 的情况下,它们将始终呈现并表现相同。此外,他们不关心生命周期方法或有自己的内部状态。
因为它们是轻量级的,所以将这些简单的组件编写为功能组件是非常标准的。
如果您的组件需要更多功能,例如保持状态,请改用类。
更多信息: https ://facebook.github.io/react/docs/reusable-components.html#es6-classes