当前位置: 首页 > news >正文

React 中的useRef 和 useTransition

1. useRef简介

由于 React 会自动处理更新 DOM 以匹配你的渲染输出,因此你在组件中通常不需要操作 DOM。但是,有时你可能需要访问由 React 管理的 DOM 元素 。例如,让一个节点获得焦点、滚动到它或测量它的尺寸和位置。在 React 中没有内置的方法来做这些事情,所以你需要一个指向 DOM 节点的 ref 来实现。

useRef 是一个 React Hook,它能帮助引用一个不需要渲染的值。

const ref = useRef(initialValue)

2. useRef案例


import {useRef,useState} from "react"

function App() {

    const [text,setText] = useState("");

    // 声明一个引用
    const userRef = useRef<HTMLInputElement>(null);

    const handleClick =()=>{

        // 当前引用的值
        setText(userRef.current?.value || "");

        // 引用的样式类
        console.log(userRef.current?.className);
        // red

        // 当前引用聚焦
        userRef.current?.focus();
    }
    return (
        <div>
            {/* 元素绑定引用 */}

            <input type="text" ref={userRef} className="red"/>
            <button onClick={handleClick}>设置</button>
            <div>{text}</div>

        </div>
    )

}


export default App

3. useTransition简介

useTransition 是一个帮助你在不阻塞 UI 的情况下更新状态的 React Hook,允许你通过标记更新将提供的回调函数作为一个过渡任务。

const [isPending, startTransition] = useTransition()

4. useTransition 案例 


import {useState,useTransition} from "react"


function App() {

    // 声明字符
    const [query,setQuery] = useState('');
    // 声明数组
    const [list,setList] = useState<any>([]);

    // 声明过渡
    const [isPedding,startTransition] = useTransition();

    // 点击操作
    const handleChange = (e:any) =>{
        // 设置输入
        setQuery(e.target.value)
        // 添加过渡
        startTransition(()=>{
            const arr = Array.from({length:5000}).fill(1);
            setList([...list,...arr]);
        })
    }

    return (
        <div>
            <input type="text" onChange={handleChange}/>
            <div>
                {isPedding?(
                    <div>加载中……</div>
                ):(
                    list.map((item:number,index:number)=>{
                        return <p key={index}>{query}</p>
                    })
                )}
            </div>
        </div>
    )
}

export default App

相关文章:

  • 实战经验分享:如何申诉并成功解封谷歌开发者账号?
  • vim中跳转头文件
  • 如何设置 Visual Studio Code 的滚轮缩放功能
  • 算法定制与双光谱技术融合:提升巡检车入侵检测系统效能
  • WebAssembly最详教程
  • maven项目中pom.xml文件内容详解
  • PyTorch 基础学习(1) - 快速入门
  • 机器学习——聚类算法K-Means
  • 继Devin之后又一AI工程师:Genie横空出世!
  • [Android] [解决]Bottom Navigation Views Activity工程带来的fragment底部遮盖的问题
  • 【项目实战】C++视频共享点播系统
  • vue2+OpenLayers 天地图上打点并且显示相关的信息(2)
  • 《笨办法学Python》 经典Python入门书籍介绍
  • 深入理解NPM版本范围预览锁定:策略、实践与示例
  • 【MySQL】库的操作
  • 数字孪生赋能智慧城市大脑智建设方案(可编辑65页PPT)
  • element-plus的表单输入框有清除按钮的,文字输入前后宽度不一致怎么解决
  • TinyWebserver的复现与改进(4):主线程的具体实现
  • WordPress原创插件:Download-block-plugin下载按钮图标美化
  • 【面试宝典】Java基础 这个面试题整理的不全 后期会进行补充
  • 用安卓手机做网站主机/怎么找关键词
  • 温州网站建设联系电话/百度pc网页版入口
  • 中国建造师官方网站查询/制作网页的网站
  • 网站怎么做才被收录快/国家再就业免费培训网
  • 自己个人网站后台怎么做/南昌seo实用技巧
  • 做网站 阿里云/长沙网站推广智投未来