React入门 (8)- Hook

2021-02-22  本文已影响0人  申_9a33

使用 Effect Hook

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

function HookPage() {

    const [count, setCount] = useState(0)
    const [date, setDate] = useState(Date.now())

    useEffect(() => {
        console.log("count Effect");
        document.title = count;
    }, [count])

    useEffect(() => {
        console.log("date Effect");

        const timeHandle = setInterval(() => {
            setDate(Date.now())
        }, 1000);
        return () => clearInterval(timeHandle);
    }, [])

    return (
        <div>
            <h3>HookPage</h3>

            <button onClick={() => setCount(count + 1)}>count:{count}</button>

            <div>{date}</div>
        </div>
    )
}

自定义Hook

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

function HookPage() {

    const [count, setCount] = useState(0)


    let date = useDate()

    useEffect(() => {
        console.log("count Effect");
        document.title = count;
    }, [count])


    return (
        <div>
            <h3>HookPage</h3>

            <button onClick={() => setCount(count + 1)}>count:{count}</button>

            <div>{date}</div>
        </div>
    )
}


export default HookPage


// 自定义Hook
function useDate(params) {
    const [date, setDate] = useState(Date.now())

    useEffect(() => {
        console.log("date Effect");

        const timeHandle = setInterval(() => {
            setDate(Date.now())
        }, 1000);
        return () => clearInterval(timeHandle);
    }, [])

    return date;
}

useuseMemo

    const expensive = useMemo(() => {
        console.log("compute");
        let sun = 0;
        for (let index = 0; index < count; index++) {
            sun += index;
        }
        return sun;
    }, [count])

<div>expensive :{expensive}</div>
import React, { useState, useEffect, useMemo } from 'react'

function HookPage() {

    const [count, setCount] = useState(0)

    const expensive = useMemo(() => {
        console.log("compute");
        let sun = 0;
        for (let index = 0; index < count; index++) {
            sun += index;
        }
        return sun;
    }, [count])

    let date = useDate()

    useEffect(() => {
        console.log("count Effect");
        document.title = count;
    }, [count])


    return (
        <div>
            <h3>HookPage</h3>

            <div>expensive :{expensive}</div>

            <button onClick={() => setCount(count + 1)}>count:{count}</button>

            <div>{date}</div>
        </div>
    )
}


export default HookPage



function useDate(params) {
    const [date, setDate] = useState(Date.now())

    useEffect(() => {
        console.log("date Effect");

        const timeHandle = setInterval(() => {
            setDate(Date.now())
        }, 1000);
        return () => clearInterval(timeHandle);
    }, [])

    return date;
}

useCallback

    const addClick = useCallback(() => {
        console.log('useCallback');
        let sun = 0;
        for (let index = 0; index < count; index++) {
            sun += index;
        }
        return sun;
    }, [count])

完整代码

import React, { useState, useEffect, useCallback, PureComponent } from 'react'

function HookPage() {

    const [count, setCount] = useState(0)

    const addClick = useCallback(() => {
        console.log('useCallback');
        let sun = 0;
        for (let index = 0; index < count; index++) {
            sun += index;
        }
        return sun;
    }, [count])

    let date = useDate()

    useEffect(() => {
        console.log("count Effect");
        document.title = count;
    }, [count])


    return (
        <div>
            <h3>HookPage</h3>

            <button onClick={() => setCount(count + 1)}>count:{count}</button>

            <div>{date}</div>

            <Child addClick={addClick} />
        </div>
    )
}


export default HookPage



function useDate(params) {
    const [date, setDate] = useState(Date.now())

    useEffect(() => {
        console.log("date Effect");

        const timeHandle = setInterval(() => {
            setDate(Date.now())
        }, 1000);
        return () => clearInterval(timeHandle);
    }, [])

    return date;
}

class Child extends PureComponent {
    render() {
        console.log("child render")
        const { addClick } = this.props

        return (
            <div>
                <h3>child</h3>
                <button onClick={() => console.log(addClick())}>add</button>
            </div>
        );
    }
}
上一篇 下一篇

猜你喜欢

热点阅读