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

React第十四节useState使用详解差异

一、useState() Hook 使用

useState视图更新用法

1、写法:

import { useState } from 'react'
const [name, setName] = useState('Andy')

利用数组解构写法,
第一个参数是自定义的属性,用于初始化时候渲染,如上面代码,初始化时候渲染为 ‘Andy’
第二个参数是set 函数,用于将 name 的值进行更新并渲染到视图上;必须以setXxx写法,固定写法;

2、注意事项:

2.1、useState() 使用必须在最顶层,不能在循环或者条件语句中调用;/
2.2、useState() 在React会被两次调用用于初始化函数,来寻找意外的不纯粹性,这种调用只在开发阶段会出现,在生产环境中不会有影响;/
2.3、set函数,只会更新下次渲染状态的变量,如果在调用set函数后,立马读取变量,会发现变量依旧是旧值,但是视图已更新为新值;此时若要读取最新的值,需要使用新的变量接收;
2.4、当设置set函数 中的前后两个值一样时,React会自动跳过第二次的渲染
2.5、当有多个事件处理更新同一个属性时,React会将所有事件批量处理完之后再调用set函数更新视图,这样可以避免多次调用set函数更新视图,影响性能;
2.6、若当前使用的状态是通过其他state或者props获取到的,那么可以将这个状态移除

3、key 的 其他用途

通常我们在列表渲染时候,需要传入唯一的 key 用于在视图更新时候进行新旧虚拟DOM树对比;
然而,当我们需要重置一个input 或者其他表单时候,我们可以通过传入不一样的key 进行重新渲染视图

import { useState } from 'react';

export default function App() {
  const [version, setVersion] = useState(0);

  function handleReset() {
    setVersion(version + 1);
  }

  return (
    <>
      <button onClick={handleReset}>Reset</button>
      <Form key={version} />
    </>
  );
}

function Form() {
  const [name, setName] = useState('Taylor');

  return (
    <>
      <input
        value={name}
        onChange={e => setName(e.target.value)}
      />
      <p>Hello, {name}.</p>
    </>
  );
}

仅代表个人观点,如有出入欢迎批评指正


http://www.kler.cn/a/429227.html

相关文章:

  • springboot多环境配置
  • 128.最长连续序列
  • 数据可视化:让数据讲故事的艺术
  • 如何使用 useMemo 和 memo 优化 React 应用性能?
  • 春秋杯-WEB
  • 【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)
  • MongoDB 建模调优change stream实战
  • 【html网页页面010】html+css制作茶品牌文创网页制作含视频元素(7页面附效果及源码)
  • 华为TaurusDB与GaussDB:信创改造的“降本提效”之路
  • npm、yarn、pnpm 设置最新国内镜像源(附官方镜像源和最新阿里源),以及 nrm 的使用教程
  • 数据结构--树和二叉树
  • HTML区块
  • 【C/C++】关于链表插入函数可能的错误
  • Rust隐式返回(最后一个表达式后不加分号)与Rust显式返回(Rust return)(Rust隐示返回、Rust显示返回)
  • 理解多模态大语言模型,主流技术与最新模型简介
  • 【Linux探索学习】第二十弹——基础IO:深入理解C语言文件I/O与Linux操作系统中的文件操作
  • PyTorch基本使用-张量的索引操作
  • 【docker集群应用】Docker + consul的容器服务更新与发现
  • Google BERT入门(3)Transformer的自注意力机制的理解(下)
  • vue router 和route 区别
  • 【MySQL】——用一文解决@基础函数group by
  • 同步数据至ES时,数据丢失问题处理
  • 为什么 JavaScript 中的 `eval` 被禁止使用?
  • 运维工程师.云计算工程师.服务器操作集锦
  • Sui 集成 Phantom,生态迎来全新里程碑
  • aws(学习笔记第十六课) 使用负载均衡器(ELB)解耦webserver以及输出ELB的日志到S3