React Hook详解
# React Hook详解
# 一、useEffect
# 1. 构成
完整的useEffect
useEffect(() => {
return () => {}
},[])
1
2
3
2
3
我们分成三个部分来看:
useEffect(() => {})
的箭头函数,是useEffect
的effct
函数,即副作用函数effect
函数中的return
中的箭头函数,是useEffect
的返回函数,组件卸载时执行[]
最后一个参数,是useEffect
函数的依赖项,如果useEffect
依赖的数据变化,即重新执行
# 2. 模拟生命周期
# (1).模拟componentDidMount功能
useEffect
的第二个参数依赖项设置为一个空数组,这样在初次调用后就不再执行了,相当于componentDidMount
function Demo () {
useEffect(() => {
console.log('hello world')
}, [])
return (
<div>
hello world
</div>
)
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# (2).模拟componentDidMount 和 componentDidUpdate功能
当useEffect
没有第二个参数的时,组件的初始化和更新都会执行
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# (3).模拟componentDidMount 和 componentWillUnmount功能
当useEffect
返回一个函数,这个函数会在组件卸载的时候执行
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => {
setCount(c => c + 1);
}, 1000);
return () => clearInterval(id);
}, []);
return <h1>hello world</h1>
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
上次更新: 2/24/2022, 10:47:07 AM