ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

React之useRef hook

2026/9/17 9:59:41 拓冰建站 浏览量
React之useRef hook

介绍

        useRef是react的自定义hook,它用来引用一个不需要渲染的值。这篇文章会介绍useRef的简单用法。

使用场景

1.实现节流

        通过useRef实现节流功能,在限制时间内多次提交,已第一次提交为准。

useThrottle.jsx

import {useEffect, useRef, useState} from "react";import {useEffect, useRef, useState} from "react";export const useThrottle = (state, timeout) => {// 计时器引用const timeoutRef = useRef(null);// 计时器执行结束const existTimeOut = useRef(false);// 节流值const [throttleValue, setThrottleValue] = useState(state);useEffect(()=>{// 存在定时器if (existTimeOut.current){return;}existTimeOut.current = true;// 设置节流值timeoutRef.current = setTimeout(()=>{setThrottleValue(state);existTimeOut.current = false;}, timeout)},[state])return throttleValue;
}

app.jsx(使用样例)

import './App.css';
import {useEffect, useState} from "react";
import {useThrottle} from "./demo/UseRefDemo";const App =()=>{const [state, setState] = useState('')const throttleState = useThrottle(state, 10000);useEffect(()=>{console.log('延迟执行:' + throttleState);}, [throttleState])return <>用戶名: <input type='text' value={state} onChange={(e)=> setState(e.target.value)}/></>
}
export  default App

实现效果

2.操作dom元素

export default function Form() {const inputRef = useRef(null);function handleClick() {inputRef.current.focus();}return (<><input ref={inputRef} /><button onClick={handleClick}>聚焦输入框</button></>);
}

实现效果