useEffect()
让我们在 function component 内也可以实现 class function 中的生命周期componentDidMount()
、componentDidUpdate()
和 componentWillUnmount()
。用法:
useEffect(() => {
// effect
return () => {
// Cleanup function
}
}, [// Updating])
第一个参数为 function,告诉 React 渲染完毕要执行什麽内容,而 useEffect 回传的是一个清除的函式(类似 class component 的 componentWillUnmount()
),在 component 将要被卸载时触发,若不需要清除,就可以将回传值省略为空。
需要清除的函式通常为:取消订阅、取消网路请求、取消计时器等。
第二个参数是更新状态的地方,如果不需更新,第二个参数可省略。
componentDidUpdate()
)。useEffect(() => {
// 要做的事
},[dependacy array])
useEffect(() => {
// 要做的事
})
componentDidMount()
)useEffect(() => {
// 要做的事
},[])
例如:
import React,{ useState, useEffect } from 'react'
const HookUseEffect = () => {
const [count, setCount] = useState(0);
const [test, setTest] = useState("test");
// 1. 没有第二个参数,每次都执行
useEffect(()=>{
console.log('我每次都会执行');
})
// 2. 第二个参数是空阵列,只会执行第一次
useEffect(()=>{
console.log('我只会执行第一次');
},[])
// 3. 第二个参数不是空阵列,这个参数的状态有被改变时就会执行
useEffect(() => {
console.log('test 被改变我就执行');
}, [test])
return (
<div>
<h3>Hook UseEffect</h3>
<p>{count}</p>
<button onClick={() => { setCount(count + 1) }}>Click</button>
<br />
<p>{test}</p>
<button onClick={() => { setTest(test.toUpperCase())} }>Test</button>
</div>
)
}
export default HookUseEffect
执行上面的程序码後,可以看到在网页一被打开时,console 就会显示三个讯息,是因为在第一次渲染时会执行所有的 useEffect。
点击 click 时,因为 count 被改变,在 console 可以看到每次点击 click 时都会触发第一个 useEffect() 执行,下图是点击 click 2 下的结果,useEffect() 被执行两次。
接着点击 test ,在 console 可以看到第三个 useEffect() 被执行,第三个 useEffect 会因为 test 的状态被改变就执行。
但这时也可以看到第一个 useEffect() 被执行了,是因为第一个 useEffect() 没有第二个参数,所以只要在 component 中有任何一个状态被改变都会执行。
<<: Day22 NiFi - 与 GCP PubSub 对接设定
在电子学里讲的杂讯,是在讯号传递的过程中会受到一些外在能量影响所产生讯号的干扰,这些由外在能量产生的...
在现代化的网站开发中,逐渐也趋向将交付的功能切小,并频繁交付,使开发出来的功能可以小部分小部分快速确...
最近Windows Updata有列印问题KB5000802, 而我是用Chrome进1111人力银...
多行输入 or 单行多个数值 如果输入的行数或一行中输入的数值数量固定且非常多,可以用回圈达成 #i...
tags: Vue.js ItIron2020 前言 终於进到最终的三天了,坦白说做为一个教学的系列...