useMemo和useCallback使用范例

useMemo

使用useMemo做值的缓存,缓存的是函数运行的结果,有助于性能提升。

import React, { useMemo, useState } from 'react';
const index = () => {

    const [count, setCount] = useState(1);
    const [value, setValue] = useState('c');
    const handleClickCount = () => {
        setCount((pre) => ++pre)
    };
    const handleClickValue = () => {
        setValue((pre) => pre + 'c')
    };
    const formatCount = () => {
        console.log('formatCount');
        return count + ',000';
    };
    const formatValue = useMemo(() => {
        console.log('format'); // count变化时不会执行
        return value.toLocaleUpperCase();
    }, [value]);

    return (
        <div>
            <Button onClick={handleClickCount}>改变count</Button>
            <Button onClick={handleClickValue}>改变value</Button>
            <div>
                <div>count: {formatCount()}</div>
                <div>value: {formatValue}</div>
            </div>
        </div>
    )
}

export default index

useCallback

同useMemo也可以做性能优化,但是缓存的是函数。

import React, { useCallback, useState, memo } from 'react';

const Children = (props: { formatValue }) => {
    const { formatValue} = props;
    return (<div>{formatValue()}</div>);
};

const NewChildren = memo(Children);

const index = () => {

    const [count, setCount] = useState(1);
    const [value, setValue] = useState('c');
    const handleClickCount = () => {
        setCount((pre) => ++pre)
    };
    const handleClickValue = () => {
        setValue((pre) => pre + 'c')
    };
    const formatCount = () => {
        console.log('formatCount');
        return count + ',000';
    };
    const formatValue = useCallback(() => {
        console.log('format');
        return value.toLocaleUpperCase();
    }, [value]);

    return (
        <div>
            <Button onClick={handleClickCount}>改变count</Button>
            <Button onClick={handleClickValue}>改变value</Button>
            <div>
                <div>count: {formatCount()}</div>
            </div>
            <NewChildren formatValue={formatValue}/>
        </div>
    )
}

export default index

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值