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

React Hooks的useState、useRef使用

React Hooks 是 React 16.8 版本引入的新特性,它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中,useState 和 useRef 是两个常用的 Hooks。

1. useState

useState 是一个允许你在函数组件中添加 state 的 Hook。

使用说明:

  • useState 返回一个状态变量和一个设置该变量的函数。
  • 如果传递给 useState 的初始值是 undefined,则返回的状态变量初始值为 undefined
  • 你可以在组件的任何地方调用 useState,但通常建议在组件的顶层调用它。

代码示例:

import React, { useState } from 'react';function Example() {
// 声明一个初始值为 "A" 的状态变量 name
const [name, setName] = useState('A');return (
<div>
<p>Hello, my name is {name}.</p>
<button onClick={() => setName('B')}>Change Name</button>
</div>
);
}

2. useRef

useRef 是一个可以存储任意数据类型的不可变(只读)引用(比如一个 DOM 元素或一个 React 组件)。ref 是一个响应式的引用,这意味着即使它的调用点没有发生改变,它的指向也会随着组件渲染而更新。

使用说明:

  • useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传递的参数(或 undefined)。
  • .current 的值在组件的整个生命周期内保持不变。
  • ref 对象在组件的整个生命周期内保持不变。

代码示例:

import React, { useState, useRef } from 'react';function Timer() {
const count = useRef(0); // 使用 useRef 存储 count 的初始值
const [seconds, setSeconds] = useState(0); // 使用 useState 来存储当前的秒数
const [countdown, setCountdown] = useState(10); // 使用 useState 来存储倒计时时间(10秒)
const interval = setInterval(() => { // 使用 setInterval 来实现倒计时功能,每秒更新一次 seconds 的值
setSeconds((seconds) => seconds + 1); // seconds 每秒自增 1,当 seconds 大于等于 countdown 时,停止倒计时并清除 interval 以清除倒计时动画
if (seconds >= countdown) { // 当 seconds 大于等于 countdown 时,清除 interval 并调用 clearTimeout 来停止倒计时动画并显示“Game Over”信息,然后调用 setCountdown 来重置倒计时时间(重新开始倒计时)和调用 setSeconds 来重置 seconds 的值(重新开始计时)
clearInterval(interval); // 当倒计时结束后,清除 interval 以停止倒计时动画并显示“Game Over”信息,然后调用 setCountdown 来重置倒计时时间(重新开始倒计时)和调用 setSeconds 来重置 seconds 的值(重新开始计时)
} else { // 当 seconds 小于 countdown 时,继续倒计时动画并显示当前的秒数和剩余的倒计时时间(每秒更新一次)
count.current = seconds; // 将 seconds 的值赋给 ref 的 current 属性以在父组件中通过 useEffect 来使用这个值并在控制台打印这个值,然后通过 countdownRef.current = countdown; 将 countdown 的值赋给 ref 的 current 属性以在父组件中通过 useEffect 来使用这个值并在控制台打印这个值,这样就可以在父组件中获取到当前秒数和剩余的倒计时时间并在控制台打印它们了。注意这里使用 ref 来存储当前的秒数和剩余的倒计时时间是因为它们需要在父组件中通过 useEffect 来使用并在控制台打印它们,而 ref 是唯一可以在函数组件和父组件之间共享数据的 Hook。

相关文章:

React Hooks的useState、useRef使用

React Hooks 是 React 16.8 版本引入的新特性&#xff0c;它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中&#xff0c;useState 和 useRef 是两个常用的 Hooks。 1. useState useState 是一个允许你在函数组件中添加 state 的 Hook。 使用说明&#xf…...

Linux--防火墙,实验案例:基于区域、服务、端口的访问控制

实验环境 某公司的Web服务器&#xff0c;网关服务器均采用Linux CentOS 7.3操作系统&#xff0c;如图2.13所示。为了 加强网络访问的安全性&#xff0c;要求管理员熟悉firewalld防火墙规则的编写&#xff0c;以便制定有效、可行的主机防护策略。 需求描述 > 网关服务器ens3…...

C++学习笔记(二十八):c++ 静态库及动态库的使用

静态库的使用 库的使用会很大程度减少我们的工作&#xff0c;本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中&#xff0c;在生成的exe中。动态链接库是在程序运行时链接的&#xff0c;可以在程序运行时调用加载库函数的方法来实现&…...

uniapp最简单的底部兼容安全区域显示

效果图&#xff1a; 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…...

图像去噪——CBDNet网络训练自己数据集及推理测试,模型转ONNX模型(详细图文教程)

CBDNet 主要由两个子网络组成&#xff1a;噪声估计子网络和去噪子网络。噪声估计子网络用于估计图像的噪声水平&#xff0c;而去噪子网络用于去除图像中的噪声。 CBDNet 的优势在于&#xff1a; 它采用了更真实的噪声模型&#xff0c;既考虑了泊松-高斯模型&#xff0c;还考虑…...

【Verilog】期末复习——解释下列名词(FPGA、ASIC、IP、RTL、EDA、HDL、FSM)

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...

计算机网络 综合(习题)

【计算机网络习题】系列文章目录 计算机网络 第一章 绪论(习题) 计算机网络 第二章 计算机网络体系结构(习题) 计算机网络 第三章 应用层(习题) 计算机网络 第四章 运输层(习题) 计算机网络 第五章 网络层(习题) 计算机网络 第六章 数据链路层(习题) 计算机网络 第七章 物…...

探索vue2框架的世界:简述常用的vue2选项式API (二)

组件实例 &#x1f449; $attrs 用于父组件隔代向孙组件传值 长设置在子组件中 v-bind"$attrs" (Vue2.4) parent.vue (父组件) <template><div class"outer"><h3>父组件</h3>名字&#xff1a;<input v-model"name"…...

云计算:OpenStack 分布式架构管理FLAT网络(单控制节点与多计算节点)

目录 一、实验 1.环境 2.控制节点创建网络 3.控制节点创建规格 4.控制节点新增安全组入口规则 5.控制节点创建实例 二、问题 1.FLAT网络底层如何实现 2.无法SSH 云主机实例 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部…...

【深度学习】cv领域中各种loss损失介绍

文章目录 前言一、均方误差二、交叉熵损失三、二元交叉熵损失四、Smooth L1 Loss五、IOU系列的loss 前言 损失函数是度量模型的预测输出与真实标签之间的差异或误差&#xff0c;在深度学习算法中起着重要作用。具体作用&#xff1a; 1、目标优化&#xff1a;损失函数是优化算法…...

2024年,为什么学网络安全找不到工作?这才是重要原因!

为什么网络安全人才缺口那么大&#xff0c;但很多人还是找不到工作&#xff1f;其实大家都忽略了1个重点&#xff0c;那就是不清楚企业在招什么样的人。 我花了2天的时间统计了主流招聘网站的岗位信息&#xff0c;发现了一个惊人的真相&#xff0c;那就是企业都喜欢招这3种人&a…...

很有用!小企业如何从零开始制作产品手册?

对于初创公司和小企业来说&#xff0c;创造一份高效、吸引人的产品手册可能不是特别简单&#xff0c;特别是当资源和预算有限的时候。然而&#xff0c;一份良好的产品手册可以帮助你传达你的品牌故事&#xff0c;展示你的产品&#xff0c;甚至可以帮助你提高销售额&#xff0c;…...

基于OpenCV的图像缩放

基础概念 缩放是将图像的尺寸变小或变大的过程&#xff0c;即减少或增加原图像数据的像素个数&#xff0c;或者说通过增加或删除像素点来改变图像的尺寸&#xff1b; 基本原理&#xff1a;将分辨率&#xff08;图片尺寸&#xff09;为(w,h)的图像&#xff0c;缩放后其图像分辨…...

基于长短期神经网络LSTM的测量误差预测

目录 背影 摘要 代码和数据下载:基于长短期神经网络LSTM的测量误差预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88714812 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的测量误差预测 结果分析 展望 参考论文 背影 …...

`package.json`也可以有注释了

众所周知&#xff0c;JSON文件是不支持注释的&#xff0c;除了JSON5/JSONC之外&#xff0c;我们在开发项目特别是前端项目时&#xff0c;大量会用到JSON文件&#xff0c;特别是在编写package.json中的scripts时&#xff0c;由于缺少注释,当有大量的命令脚本时&#xff0c;就有了…...

数学之何为数学

数学是什么 数学是绝大多数人学得最多的一门功课&#xff0c;但对于“数学是什么&#xff1f;”这一看来很普通的问题&#xff0c;却很难一下子给出一个使公众满意的回答。按照恩格斯的说法&#xff0c;数学是以现实世界的空间形式和数量关系为研究对象的。尽管人们现在对空间…...

docker容器内,将django项目数据库改为postgresql

容器为ubuntu20.04版本&#xff0c;新建了一套django项目&#xff0c;使用的默认sqllit3&#xff0c;换为postgresql&#xff0c;容器里安装postgresql方法 步骤1: 安装PostgreSQL数据库 # 打开一个bash会话在你的容器中 docker exec -it <container_id_or_name> bash#…...

【echarts】雷达图参数详细介绍

1. 详细示例 var option {tooltip: {trigger: item},radar: {startAngle: 90,//第一个指示器轴的角度&#xff0c;默认90indicator: [// 指示器{ name: Category A, max: 220 },// name:指示器名称{ name: Category B, max: 200 },// max:指示器的最大值&#xff0c;可选&…...

网络安全试题进阶——附答案

选择题 什么是CSRF攻击的全称&#xff1f; A. Cross-Site Request ForgeryB. Cross-Site ScriptingC. Credential Sniffing and Retrieval ForceD. Cyber Security and Risk Framework 哪种安全攻击利用用户的社交工程&#xff0c;诱使他们点击似乎是合法链接的恶意链接&#x…...

二刷Laravel 教程(构建页面)总结Ⅰ

L01 Laravel 教程 - Web 开发实战入门 ( Laravel 9.x ) 一、功能 1.会话控制&#xff08;登录、退出、记住我&#xff09; 2.用户功能&#xff08;注册、用户激活、密码重设、邮件发送、个人中心、用户列表、用户删除&#xff09; 3.静态页面&#xff08;首页、关于、帮助&am…...

TrafficMonitor插件系统:5个技巧打造你的个性化Windows监控中心

TrafficMonitor插件系统&#xff1a;5个技巧打造你的个性化Windows监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 想要让Windows任务栏上的TrafficMonitor变得更加强大…...

PDF-Parser-1.0零售业应用:促销海报信息提取

PDF-Parser-1.0零售业应用&#xff1a;促销海报信息提取 1. 引言 零售行业的促销活动总是让人又爱又恨。爱的是能带来销量增长&#xff0c;恨的是每次活动都要处理海量的促销海报——设计、印刷、分发&#xff0c;最后还要手动录入成千上万的商品信息、价格数据和活动规则。一…...

Go的interface空值与类型断言的最佳实践

Go语言中的interface空值与类型断言是开发者经常遇到的核心概念&#xff0c;掌握其最佳实践能显著提升代码的健壮性和可维护性。interface的灵活性使其成为Go多态的重要工具&#xff0c;但空值处理和类型断言的不当使用可能导致运行时错误或逻辑漏洞。本文将深入探讨如何高效处…...

STEP3-VL-10B WebUI教程:自定义快捷提示词模板+一键插入常用指令

STEP3-VL-10B WebUI教程&#xff1a;自定义快捷提示词模板一键插入常用指令 你是不是每次用多模态AI模型时&#xff0c;都要重复输入那些固定的指令&#xff1f;比如“请详细描述这张图片”、“帮我分析这个图表的数据”、“用中文回答”……一遍又一遍地打字&#xff0c;不仅…...

从nvidia-smi到npu-smi:给CUDA开发者的华为昇腾NPU监控指南

从nvidia-smi到npu-smi&#xff1a;CUDA开发者快速掌握昇腾NPU监控的实战手册 当你的技术栈从英伟达GPU扩展到华为昇腾NPU时&#xff0c;监控工具的使用体验就像从自动挡切换到手动挡——虽然最终目的地相同&#xff0c;但操作逻辑需要重新适应。作为曾经每天与nvidia-smi打交道…...

技术深度:Windows任务栏透明化引擎TranslucentTB架构原理与高级配置指南

技术深度&#xff1a;Windows任务栏透明化引擎TranslucentTB架构原理与高级配置指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Tran…...

GLM-OCR Python API详解:predict接口返回结构、置信度阈值设置与后处理

GLM-OCR Python API详解&#xff1a;predict接口返回结构、置信度阈值设置与后处理 1. 项目概述与环境准备 GLM-OCR 是一个基于先进多模态架构的高性能OCR识别模型&#xff0c;专门针对复杂文档理解场景设计。它不仅能识别常规文本&#xff0c;还支持表格识别、公式识别等高级…...

LangChain RAG实战:用PGVector把你的本地知识库变成智能问答机器人(Python代码详解)

LangChain RAG实战&#xff1a;用PGVector把你的本地知识库变成智能问答机器人&#xff08;Python代码详解&#xff09; 你是否曾经面对堆积如山的本地文档感到无从下手&#xff1f;PDF报告、Markdown笔记、TXT日志散落在各个文件夹&#xff0c;每次查找关键信息都像大海捞针。…...

解密Matplotlib字体机制:为什么你的中文总变成豆腐块?

解密Matplotlib字体机制&#xff1a;为什么你的中文总变成豆腐块&#xff1f; 当你在Python中使用Matplotlib绘制图表时&#xff0c;是否经常遇到这样的场景&#xff1a;精心设计的图表标题和标签&#xff0c;一旦包含中文就变成了令人头疼的"豆腐块"&#xff08;□&…...

RC522 RFID模块SPI驱动开发与寄存器级控制实践

1. RC522 RFID读写模块底层技术解析与嵌入式驱动开发实践1.1 模块硬件架构与通信协议基础RC522 是 NXP&#xff08;恩智浦&#xff09;推出的高度集成非接触式射频识别&#xff08;RFID&#xff09;读写芯片&#xff0c;广泛应用于门禁系统、公交卡读取、物流追踪等嵌入式场景。…...