React组件渲染等触发函数useEffect

React组件渲染等触发函数useEffect

React中的useEffect与Vue中的onMounted有相似性,但useEffect功能要多于onMounted

函数语法:useEffect(() => {},[])

说明:第一个参数是触发后处理函数,第二个参数为要监视数据的数组

一、不传递监视数组

不传递第二个参数时:

​ ① 处理函数触发时机为:初次渲染组件更新

​ ② 处理函数的返回函数执行时机:初次渲染组件更新组件卸载

​ ③ useEffect函数默认监视当前组件的所有状态数据(响应式数据)

使用如下:

function Counter() {
    const [count, setCount] = useState(1)
    useEffect(
        /*    处理函数触发时机:初次渲染、组件更新   */
        () => {
            console.log(`count=${count}`)
            /*
                返回的函数执行时机:
                    初次渲染执行、组件更新执行、组件卸载执行
             */
            return () => {
                console.log('计数器Counter被卸载...')
            }
        }
    )
    return (
        <div>
            <div>{count}</div>
            <button onClick={() => setCount(count + 1)}>count++</button>
        </div>
    )
}
export default function App() {
    const [showCounterStatus, setShowCounterStatus] = useState(true)
    return (
        <div>
            {
                showCounterStatus &&
                <Counter></Counter>
            }
            <button onClick={() => setShowCounterStatus(!showCounterStatus)}>{showCounterStatus?'卸载':'安装'}计数器</button>
        </div>
    )
}

二、传递监视的数据为空数组

将第二个参数传递为空数组时:

​ ① 处理函数触发时机为:初次渲染

​ ② 处理函数的返回函数执行时机:组件卸载

​ ③ useEffect函数不监视任何状态数据

使用如下:

function Counter() {
    const [count, setCount] = useState(1)
    useEffect(
        /*    处理函数触发时机:初次渲染   */
        () => {
            console.log(`count=${count}`)
            /* 返回的函数执行时机:组件卸载执行 */
            return () => {
                console.log('计数器Counter被卸载...')
            }
        },
        []
    )
    return (
        <div>
            <div>{count}</div>
            <button onClick={() => setCount(count + 1)}>count++</button>
        </div>
    )
}
export default function App() {
    const [showCounterStatus, setShowCounterStatus] = useState(true)
    return (
        <div>
            {
                showCounterStatus &&
                <Counter></Counter>
            }
            <button onClick={() => setShowCounterStatus(!showCounterStatus)}>{showCounterStatus?'卸载':'安装'}计数器</button>
        </div>
    )
}

三、传递需要监视的数据

将第二个参数传递为需要被监视数据的数组时:

​ ① 处理函数触发时机为:初次渲染监视数据变化

​ ② 处理函数的返回函数执行时机:初次渲染监视数据变化组件卸载

​ ③ useEffect函数监视的数据为第二个参数传递的数组

使用如下:

function Counter() {
    const [count, setCount] = useState(1)
    useEffect(
        /*    处理函数触发时机:初次渲染、监视数据变化   */
        () => {
            console.log(`count=${count}`)
            /*
                返回的函数执行时机:
                    初次渲染、监视数据变化、组件卸载
             */
            return () => {
                console.log('计数器Counter被卸载...')
            }
        },
        [count]
    )
    return (
        <div>
            <div>{count}</div>
            <button onClick={() => setCount(count + 1)}>count++</button>
        </div>
    )
}
export default function App() {
    const [showCounterStatus, setShowCounterStatus] = useState(true)
    return (
        <div>
            {
                showCounterStatus &&
                <Counter></Counter>
            }
            <button onClick={() => setShowCounterStatus(!showCounterStatus)}>{showCounterStatus?'卸载':'安装'}计数器</button>
        </div>
    )
}

总结

​ Vue中的onMounted只会在组件初次挂载完毕之后执行一次,

​ React中的useEffect可以在初次挂载完毕组件更新组件卸载等时刻执行

😄😄😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值