useDeferredValue说明和使用

// useDeferredValue提供一个state的延迟版本, 根据其返回的state能够延迟更新UI中的某一部分, 从而达到性能优化的目的
// 1. 在组件首次渲染期间, 返回值将与传入的值相同
// 2. 在组件更新期间, React将首先使用旧值重新渲染UI结构, 这能够跳过某些复杂组件的rerender, 从而提高渲染效率. 随后, React将使用新值更新deferredValue, 并在后台使用新值重新渲染一个低优先级的更新.这也意味着, 如果在后台使用新值更新时value再次改变, 它将打断那次更新.

import React, { FC, useState, useDeferredValue, memo } from "react";

export const Entity: FC = () => {
    const [query, setQuery] = useState('')
    const defferQuery = useDeferredValue(query);

    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
        setQuery(e.currentTarget.value);
    }

    return (
        <div>
            <input value={query} onChange={handleChange} />
            {/* query === defferQuery表示值已更新完毕, 显示最新的值, 不相等表示数据还在更新, 使用透明度区分 */}
            <div style={{opacity: query === defferQuery ? 1 : 0.3}}>
                <SearchResult query={defferQuery} />
            </div>
        </div>
    )
}

const SearchResult: FC<{ query: string }> = memo((props) => {
    if (!props.query) return;
    const result = Array(30000).fill(props.query).map((item, i) => <p key={i}>{item}</p>)
    return result
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值