react扩展4_EffectHook

在上一文中,我们已经能够模拟出函数式组件的state状态了,但是还没有办法能模拟出生命周期。今天我们来使用另一个Hook———EffectHook来模拟函数式组件的生命周期
我们同样用一个实例来向大家讲解。

需求如下:
1.一个原始值为0的变量,每经过1秒,自增1.
2.点击卸载组件的按钮可以将整个组件卸载
3.在卸载之前需要将定时器关掉

在类式组件中,我们完全可以使用componentDidMountcomponentDidUpdatecomponentWillUnmount的生命周期来实现。在函数式组件中,我们可以借助EffectHook来模拟出同样的效果。

语法说明:

useEffect(()=>{
	//在此可以执行任何带副作用的操作
	return()=>{//在组件卸载前执行
		//在此做一些收尾的工作,比如清除定时器、取消订阅等
	}
},[stateValue])
//如果指定的是[],相当于不监控任何state,那么回调函数只会在第一次render()后执行,相当于componentDidMount。
//如果没有写[],相当于监控所有的state,也就是说所有的stateValue发生改变的时候都会调用一次回调函数,这个时候的EffectHook相当于componentDidMount和componentDidUpdate。
//如果指定了某个值,那么将在指定值发生改变的时候执行回调函数。

也就是说,可以把useEffect Hook看做是componentDidMountcomponentDidUpdatecomponentWillUnmount的组合。

import React from 'react'
import ReactDOM from 'react-dom'

export default function Demo(){
    const [count,setCount]=React.useState(0);

    React.useEffect(()=>{
        let timer=setInterval(()=>{
            setCount(count=>{return count+1})
        },1000)
        return ()=>{
            clearInterval(timer)
        }
    },[])
    
    const add=()=>{
        // setCount(count+1)
        setCount(count=>{return count+1})
    }
    const unmount=()=>{
        ReactDOM.unmountComponentAtNode(document.getElementById('root'))
    }
    return (
        <div>
            <h2>当前求值为:{count}</h2>
            <button onClick={add}>点击+1</button>
            <button onClick={unmount}>点击卸载</button>
        </div>
    )
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值