新答案:在 React Hooks 推出之前,以下大部分内容都是正确的。
-
componentDidUpdate
可以使用 复制,其中 是重新呈现时要运行的函数。useEffect(fn)
fn
-
componentDidMount
方法可以使用 复制,其中 是重新呈现时要运行的函数,并且是组件将为其重新呈现的对象数组,当且仅当至少有一个对象自上次呈现以来更改了值。由于没有,因此在第一次装载时运行一次。useEffect(fn, [])
fn
[]
useEffect()
-
state
可以使用 复制 ,其返回值可以反结构化为状态的引用和可以设置状态的函数(即 )。一个例子可以更清楚地解释这一点:useState()
const [state, setState] = useState(initState)
const Counter = () => {
const [count, setCount] = useState(0)
const increment = () => {
setCount(count + 1);
}
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>+</button>
</div>
)
}
default export Counter
顺便说一句,我听到很多人讨论出于性能原因不使用功能组件,特别是
“在功能组件中为每个渲染重新定义事件处理函数”
虽然这是真的,但请考虑您的组件是否真的以如此快的速度或体积渲染,这将值得关注。
如果是,则可以阻止使用 和 hooks 重定义函数。但是,请记住,这可能会使您的代码(在微观上)性能下降。useCallback
useMemo
但老实说,我从未听说过重新定义函数是 React 应用程序中的瓶颈。过早的优化是万恶之源 - 当出现问题时,请担心这一点。
旧答案:你有正确的想法。如果你的组件除了吸收一些道具和渲染之外没有做更多的事情,那就去功能化了。您可以将这些视为纯函数,因为它们在给定相同道具的情况下始终呈现和行为相同。此外,他们不关心生命周期方法或拥有自己的内部状态。
因为它们是轻量级的,所以将这些简单的组件编写为功能组件是非常标准的。
如果您的组件需要更多功能(如保持状态),请改用类。
更多信息: https://facebook.github.io/react/docs/reusable-components.html#es6-classes