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>
    </>
  );
}

实现效果

相关推荐

  1. react ApicreateContext

    2024-01-07 10:12:01       53 阅读
  2. reactuseContext

    2024-01-07 10:12:01       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 10:12:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 10:12:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 10:12:01       87 阅读
  4. Python语言-面向对象

    2024-01-07 10:12:01       96 阅读

热门阅读

  1. 【js逆向】爬虫之进程,线程,协程

    2024-01-07 10:12:01       56 阅读
  2. 【笔记】Mac M1上miniforge3与tushare的安装

    2024-01-07 10:12:01       79 阅读
  3. Nodejs搭配axios下载图片

    2024-01-07 10:12:01       64 阅读
  4. SQL优化:条件提升

    2024-01-07 10:12:01       75 阅读
  5. Linux 进程管理

    2024-01-07 10:12:01       46 阅读
  6. K8S学习指南(62)-K8S源代码走读之Kube-Scheduler

    2024-01-07 10:12:01       71 阅读
  7. 纯虚函数和抽象类(C++)

    2024-01-07 10:12:01       62 阅读
  8. Binius:基于binary fields的SNARKs(Part 2)

    2024-01-07 10:12:01       72 阅读
  9. DOCKER镜像

    2024-01-07 10:12:01       59 阅读
  10. EF Core实体的五种不同的状态

    2024-01-07 10:12:01       81 阅读
  11. uniapp分包

    2024-01-07 10:12:01       54 阅读