这是ReactConf2018 Dan Abramov 的演讲中解释差异的一个例子:
以下是以下示例的一些发现:
- 您将使用钩子编写更少的样板代码
- 访问生命周期更新和状态更新
useEffect()
- 关于性能一方面是:
与 componentDidMount 和 componentDidUpdate 不同,传递给 useEffect 的函数在布局和绘制后在延迟事件期间触发
- 代码共享太容易了,并且 useEffect() 可以在同一个组件中针对不同目的多次实现。
- 您可以通过将数组作为第二个参数传递给
useEffect()
hook 来更有效地控制组件重新渲染,这在您仅通过空数组 [] 仅在安装和卸载时渲染组件时非常有效。
- 使用多个
useEffect()
钩子来分离关注点和react将:
Hooks 让我们可以根据代码在做什么而不是生命周期方法名称来拆分代码。React 将按照指定的顺序应用组件使用的所有效果
使用类:
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
componentDidMount() {
document.title = `You clicked ${this.state.count} times`;
}
componentDidUpdate() {
document.title = `You clicked ${this.state.count} times`;
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}
使用钩子:
import { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
// Similar to componentDidMount and componentDidUpdate:
useEffect(() => {
// Update the document title using the browser API
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}