React之useRef hook

news/2024/7/15 18:03:58 标签: react.js

介绍

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

实现效果


http://www.niftyadmin.cn/n/5312655.html

相关文章

3D Surface Subdivision Methods 3D 曲面细分方法

文章目录 1 介绍2 细分法3 一个简单的例子&#xff1a;Catmull-Clark 细分4 Catmull-Clark 细化5 Refinement Host6 Geometry Policy7 四种细分方法8 示例&#xff1a;自定义细分方法9 实施历史 原文地址: https://doc.cgal.org/latest/Subdivision_method_3/index.html#Chapte…

传统图像处理学习笔记更新中

文章目录 传统图像处理颜色空间高斯滤波腐蚀和膨胀开运算和闭运算如何求一张图片的均值?线性插值双线性插值仿射变换透视变换常见的边缘检测算子Sobel 算法Canny 算法Hough 变换原理(直线和圆检测)找轮廓(findCountours)单应性(homography)原理

解决hbuilderx打包网址成为5+app,点击返回按钮直接退出app的BUG

直接上代码 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"viewport-fitcover,widthdevice-width,initial-scale1,minimum-scale1,maximum-scale1,user-scalableno" /><ti…

IntelliJ IDEA开发工具常规设置、插件、快捷键、Debug和集成工具一篇快速入门

文章目录 常规设置同步设置快捷键&#xff08;Windows&#xff09;搜索层级关系查看光标选择代码定位代码操作Git操作编辑器操作 Debug操作集成本地Git集成本地Maven集成本地Tomcat实用插件 版本说明&#xff1a; 注意&#xff1a;若和上面的IDEA版本差异较大&#xff0c;可能存…

git常用指令及应用案例

一、常用指令 用户配置 git config --global user.name "bettyaner" git config --global user.email bettyaner163.com工作常用指令 // 初始化仓库 git init // 对状态的跟踪、分为内容状态和文件状态 // 内容状态标示内容文件的改变&#xff0c;有三个区域&…

Open CV 图像处理基础:(四)使用 Open CV 在 Java 中进行基本的图片模糊处理

使用 Open CV 在 Java 中进行基本的图片模糊处理 方法介绍 在Java中使用OpenCV进行图片模糊处理&#xff0c;主要可以通过以下几种方式&#xff1a; 均值模糊&#xff08;Averaging Blur&#xff09;: 通过计算核窗口内所有像素的平均值来模糊图像。这种方法可以移除图像噪…

Linux中RPM工具安装软件包

RPM(redhat package manager)包的命名规则(rpm 包安装的时候需要装依赖包,较为复杂 http-parser-2.8.0-2.el8.x86_64.rpm http-parser : 软件包的名称 2.8.0 : 软件包的版本号(版本号格式为主版本号.次版本号.修订号) 2 : 二进制包发布的次数,表示rpm包第2次编程生成的 el…

docker上安装 mysql+安装redis

1.还未安装docker的 1.1看这里 Docker安装(CentOS)简单使用-CSDN博客 1.2 一些基本命令 docker的基本命令(镜像容器)-CSDN博客 2.开始安装mysql5.7.26 2.1 拉取镜像 docker pull mysql:5.7.26 备注&#xff1a;其他版本查看 https://hub.docker.com/_/mysql/tags 2.2 运…