React Hooks学习之旅二:useEffect替代生命周期函数

useEffect可以替代生命周期函数componentDidMount、componentDidUpdate和componentWillUnmount。

useEffect替代componentDidMount和componentDidUpdate

修改Example.js:

import React, { useState,useEffect } from 'react';

/**useState可以设置和改变状态 */
function Example(){
    const [count,setCount] = useState(0);//数组解构
    /**useEffect替代生命周期函数componentDidMount和componentDidUpdate */
    useEffect(()=>{
        console.log('useEffect => You clicked '+count+' times');
    })
    return(
        <div>
            <p>You clicked {count} times</p>
            <button 
                onClick={()=>{setCount(count+1)}}
            >
                Click me
            </button>
        </div>
    )
}

export default Example;

点击打印。

页面加载完毕时执行一次。

页面更新一次自动执行一次。

useEffect替代componentWillUnmount

组件销毁前执行componentWillUnmount。我们使用路由来实现销毁动作。

安装路由:

npm install --save react-router-dom

在Example.js中引入Router、Link、Route:

import {BrowserRouter as Router , Route, Link} from 'react-router-dom';

配置两个组件的路由:

function Index(){
    useEffect(()=>{
        console.log("useEffect=>老弟,你来了!Index页面");
    })
    return <h2>Juan.com</h2>
}

function List(){
    console.log("useEffect=>老弟,你来了!List页面");
    return <h2>List.com</h2>
}


/**useState可以设置和改变状态 */
function Example(){
    const [count,setCount] = useState(0);//数组解构
    /**useEffect替代生命周期函数componentDidMount和componentDidUpdate */
    useEffect(()=>{
        console.log('useEffect => You clicked '+count+' times');
    })
    return(
        <div>
            <p>You clicked {count} times</p>
            <button 
                onClick={()=>{setCount(count+1)}}
            >
                Click me
            </button>

            <Router>
                <ul>
                    <li><Link to="/">首页</Link></li>
                    <li><Link to="/list/">列表</Link></li>
                </ul>
                <Route path="/" exact component={Index}/>
                <Route path="/list/" component={List}/>
            </Router>
        </div>
    )
}

运行效果:

进入首页显示“useEffect=>老弟,你来了!List页面”;

进入列表页显示“useEffect=>老弟,你来了!List页面”。

修改Example.js,在useEffect中添加return实现解绑:

function Index(){
    useEffect(()=>{
        console.log("useEffect=>老弟,你来了!Index页面");
        //销毁
        return ()=>{
            console.log('老弟!你走了!Index');
        }
    },[]) /**空数组表示只有当该组件销毁时才执行return,如果数组中有值则表示只有当这个值变化时才执行 */
    return <h2>Juan.com</h2>
}

实现效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值