React hooks文档笔记(四) useRef

news2024/9/30 7:18:25

useRef

当想让组件记住一些信息,又不想触发新的渲染,可以使用ref:总是返回同一个对象。

1. state 和 refs 的比较

refs(普通的 JavaScript 对象)

state

更改时不触发重新渲染

更改时触发重新渲染

可变的——修改/更新current’s value

(修改完立即生效

 ref.current = 5;

  console.log(ref.current); // 5

不可变——必须使用state的setting函数去修改state变量

React 状态的限制(每个渲染的快照,不会同步更新)

useRef(initialValue)  returns

{ current: initialValue }

useState(initialValue) returns ( [value, setValue])

每次更新state,组件会重新渲染

import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  function handleClick() {
    setCount(count + 1);
  }
  return (
    <button onClick={handleClick}>
      You clicked {count} times
    </button>
  );
}

 ref.current不要在渲染过程中读取或写入,组件不会随着每次ref增量而重新渲染:

import { useRef } from 'react';

export default function Counter() {
  let countRef = useRef(0);
  function handleClick() {
    // This doesn't re-render the component!
    countRef.current = countRef.current + 1;
  }
  return (
    <button onClick={handleClick}>
      You clicked {countRef.current} times
    </button>
  );
}

2. 常见使用场景

A. 存储timeout IDs

import { useRef } from 'react';

export default function Chat() {
  let timeoutID = useRef(null);

  function handleSend() {
    timeoutID.current = setTimeout(() => {
      alert('Sent!');
    }, 3000);
  }

  function handleUndo() {
    clearTimeout(timeoutID.current);
  }
}

B. 存储和操纵dom元素(避免更改由 React 管理的 DOM 节点)

  • 基础用法: <div ref={counterRef} />

  • 访问其他组件的dom节点:

import { forwardRef, useRef } from 'react';

const MyInput = forwardRef((props, ref) => {

//(可选)限制公开的内容,不让Form组件的ref调用处理其他事件(如修改css)
  const realInputRef = useRef(null);
  useImperativeHandle(ref, () => ({
    // Only expose focus and nothing else
    focus() {
      realInputRef.current.focus();
    },
  }));

  return <input {...props} ref={ref} />;
});

export default function Form() {
  const inputRef = useRef(null);

  function handleClick() {
    inputRef.current.focus();
  }

  return (
    <>
      <MyInput ref={inputRef} />
      <button onClick={handleClick}>
        Focus the input
      </button>
    </>
  );
}

 C. 存储其他对计算jsx非必要的对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复现基于unet的眼底血管的医学图像分割项目

代码及数据集&#xff1a; MedicalImageSegmentation: 复现一个医学图像分割的项目 - Gitee.com xin麒/MedicalImageSegmentation - 码云 - 开源中国 (gitee.com) 两个都可以&#xff0c;差不多的&#xff08;要不就使用第二个吧&#xff0c;第二个后续都会继续更新&#xf…

【JUC-1】java多线程线程基础知识

线程创建方式 继承Thread类.实现Runable接口.实现Callable接口. Runable/Callable接口的实现, 都是重写其中的run/call方法, 实现任务逻辑, 再由线程执行器(可以是Thread类,也可以是线程池)并发执行run/call的逻辑. 而Thread类中的包含start方法, 可以控制线程启动,执行任务…

关于最小生成树

最小生成树问题&#xff0c;常用于将所有顶点连通的最大最小代价。比如十个城市去修路&#xff0c;不同成熟时之间修路的代价不同&#xff0c;让你找一个方案可以满足每个城市之间互相连通并且代价最小。 解决这个问题有两个算法&#xff0c;Prim算法和Kruskal算法。不同的是&a…

安装和配置nginx(含https)

文章目录 安装Nginx配置单独的配置&#xff1a;https配置 nginx为什么可以处理高并发 安装Nginx sudo yum update sudo yum install epel-release sudo yum install nginx sudo systemctl start nginx安装好后可以打开自己的域名 看一下默认的页面 配置 具体参考Link 位置 …

香港大学推出创新科技教育基金,拟支持Web3和生成式AI等领域教学

区块链技术是近年来备受关注的领域之一,其应用范围已经涵盖了金融、医疗、物流等众多行业。而随着区块链技术的不断发展和完善&#xff0c;越来越多的企业和机构开始将其应用到实际生产和业务中。作为其中一个重要的应用领域&#xff0c;金融领域也成为了区块链技术的重要应用场…

CTF加密解密—CRYPTO—easyrsa1

0x00 考察知识点 CTF 加解密合集&#xff1a;CTF 加解密合集 本道题实际上是在考察对RSA算法的练度问题&#xff0c;已知n&#xff0c;需要将n拆解为两个质数。 工具&#xff1a; http://www.factordb.com/index.php &#xff08;在线分离&#xff09; 0x01 题目 e 6553…

青岛大学_王卓老师【数据结构与算法】Week03_11_线性表的链式表示和实现11_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

f(x)*g(x)的问题——C的缺陷

整理一道颇具争议的题目 #include<stdio.h> #define Mul(x,y) x*y int main() { int a1,b2,c3; printf("%d",Mul(ab,bc)); }关于这道题目&#xff0c;根据不同的编译器&#xff0c;答案会出现两种答案 11和14&#xff0c;见下面&#xff1a; 关于dev C: 关于…

【前端面试手册】CSS系列-回流与重构

本专栏收录于前端面试手册-CSS系列如果该文章对您有帮助还希望你能点一个小小的订阅&#xff0c;来增加博主创作的动力✍&#x1f3fb;话不多说开始进入正题 回流和重构在前端CSS中是一个常见的问题&#xff0c;那么你对回流何重构有哪些了解呢&#xff1f; 一、什么场景下会触…

Vulnhub: EvilBox:One靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.130 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 secret目录爆破 feroxbuster -k -d 1 --url http://192.168.111.130/secret/ -w /opt/zidian/SecLists-2022.2/Disco…

【深度学习推荐系统 工程篇】二、从TF-Serving看生产环境的模型推理服务

前言 模型训练完成后&#xff0c;到在线部署是其所必须要做的一步&#xff0c;伴随模型结构复杂/算力增加&#xff0c;打造低延时/低资源占用的模型预测服务是模型上线的关键&#xff1b; tensorflow 很早就开源了tf-serving&#xff08;代码连接&#xff1a;https://github.…

Pygame中获取键盘按键的方法

1 事件与队列 在Pygame中&#xff0c;将用户对游戏的操作叫做“事件”。键盘按键是一种事件&#xff0c;鼠标点击和游戏手柄的输入也是一种事件。在Pygame的子模块locals中&#xff0c;对这些事件进行了定义。当用户通过键盘、鼠标或者游戏手柄对游戏进行操作后&#xff0c;产…

Bootstrap 代码

文章目录 Bootstrap 代码更多实例实例1实例2实例3&#xff0c;4实例5实例6 Bootstrap 代码 Bootstrap 允许您以两种方式显示代码&#xff1a; 第一种是 <code> 标签。如果您想要内联显示代码&#xff0c;那么您应该使用 <code> 标签。第二种是 <pre> 标签。…

mysql 创建用户(修改用户访问数据库权限,被外界IP访问权限)

我们执行,下面代码&#xff1a; select user,host from mysql.user;生成表: 这里面存放我们所有的用户&#xff0c;user 表示用户名, host表示 能被访问的IP范围。 1.修改用户能被访问的范围 # "%" 表示,能被所有IP访问。 update mysql.user set host "%&q…

力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树

题目来源&#xff1a; 538&#xff1a;https://leetcode.cn/problems/convert-bst-to-greater-tree/description/ 1038&#xff1a; https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree/description/ C题解1&#xff1a;递归法。二叉搜索树由大到小&#…

CST仿真半波偶极子天线学习笔记

CST仿真半波偶极子天线 文章目录 CST仿真半波偶极子天线1. 新建工程模板2.建模3. 激励方式设置4. 求解器设置5. 仿真分析6. 数据后处理 设计要求&#xff1a; 谐振频率为3.48GHz&#xff0c;基板采用Rogers RT5880板材&#xff0c;介电常数2.2&#xff0c;损耗角正切0.0009&…

Git学习笔记(三)

导航小助手 五、远程操作 5.1 理解分布式版本控制系统 5.2 远程仓库 5.2.1 新建远程仓库 5.2.2 克隆远程仓库 5.2.3 向远程仓库推送 5.2.4 拉取远程仓库 五、远程操作 5.1 理解分布式版本控制系统 前面博客所介绍的 关于 Git 的内容&#xff08;比如说&#xff1a;工作…

输入和输出处理

目录 1.File类 2.流 2.1.InputStream 2.2.OutputStream 总结 内容仅供学习交流&#xff0c;如有问题请留言或私信&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 有空您就点点赞 1.File类 文件&#xff1a;相关记录或存放在一起的数据的集合 Java程序如…

高考考了657分想重新复读一年,又害怕白费一年

高考考了657分想重新复读一年&#xff0c;又害怕白费一年。 如果你想重新复读一年&#xff0c;可能需要考虑到以下几点&#xff1a; 复读的代价&#xff1a;复读需要花费一年的时间和精力&#xff0c;而且这个过程中你可能会面临很多挑战和压力&#xff0c;包括学习上的、生活上…

多模态之论文笔记BEiT, BEiT V2, BEiT V3

文章目录 OverviewBEiT1.0. Summary1.1. BEiT VS BERT2.1. Two Views: visual tokens2.1. Two Views: image patches3. Results BEiT V21.0. Summary1.1. Motivation2.1. Methods -- VQ-KD2.2. Methods -- patch aggregation3.1. Results -- image classification & semant…