react18【系列实用教程】useState (2024最新版)

news/2024/9/22 13:46:12/

类似 vue 的 data 选项

功能

向组件添加响应式变量,当响应式变量变化时,组件的视图UI也会跟着变化【数据驱动视图】

语法

  • 参数为变量的初始值
  • 返回值为一个只有两个元素的数组,第一项元素为传入的参数,第二项元素是一个setter 函数

使用范例 – 响应式变量

import { useState } from "react";
const Demo = () => {const [count, setCount] = useState(0);function addOne() {setCount(count + 1);}return <button onClick={addOne}>{count}</button>;
};export default Demo;
  • 声明了响应式变量 count ,初始值为 0
  • 通过 [] 进行了数组的解构赋值,将 0 赋值给了 count ,可响应式改变 count 值的 setter 函数赋值给了
  • 通过 setCount 可修改 count 的值 (setCount 可以自定义为其他名称,如 updateCount , 但推荐统一 set 开头)
  • setCount 的语法是将 count 的新值作为参数传入
  • setCount 的作用是触发视图根据 count 的新值重新渲染

使用范例 – 响应式对象

  const [person, setPerson] = useState({firstName: 'Barbara',lastName: 'Hepworth',email: 'bhepworth@sculpture.com'});function handleFirstNameChange(e) {// 修改属性值setPerson({...person,firstName: e.target.value});}

修改嵌套的属性值

  const [person, setPerson] = useState({name: 'Niki de Saint Phalle',artwork: {title: 'Blue Nana',city: 'Hamburg',image: 'https://i.imgur.com/Sd1AgUOm.jpg',}});function handleNameChange(e) {setPerson({...person,name: e.target.value});}function handleTitleChange(e) {setPerson({...person,artwork: {...person.artwork,title: e.target.value}});}

显然,非常麻烦,可以用 Immer 库编写简洁的更新逻辑

npm install use-immer
import { useImmer } from 'use-immer';
  const [person, updatePerson] = useImmer({name: 'Niki de Saint Phalle',artwork: {title: 'Blue Nana',city: 'Hamburg',image: 'https://i.imgur.com/Sd1AgUOm.jpg',}});function handleNameChange(e) {updatePerson(draft => {draft.name = e.target.value;});}function handleTitleChange(e) {updatePerson(draft => {draft.artwork.title = e.target.value;});}

使用范例 – 响应式数组

  const [fruitList, setFruitList] = useState([]);function changeHandler(e) {let newValue = e.target.value;if (fruitList.includes(newValue)) {// 数组删除元素setFruitList(fruitList.filter((item) => item !== newValue));} else {// 数组新增元素setFruitList([...fruitList, newValue]);}}

http://www.ppmy.cn/news/1461526.html

相关文章

RS3236-3.3YUTDN4功能和参数介绍及PDF资料

RS3236-3.3YUTDN4功能和参数介绍及PDF资料-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 品牌: RUNIC(润石) 封装: XDFN-4-EP(1x1) 描述: 带过温保护 输出类型: 固定 最大输入电压: 7.5V 输出电压: 3.3V 最大输出电流: 500mA RS3236-3.3YUTDN4 是一款低压差线性稳压器&#x…

专注于出海企业的SOCKS5代理、代理IP与网络安全

在全球化市场中&#xff0c;企业面临的挑战不仅仅是文化和语言的差异&#xff0c;更有复杂的网络环境和严峻的网络安全问题。特别是对于出海的跨界电商和游戏行业&#xff0c;如何利用先进的网络技术如SOCKS5代理和代理IP&#xff0c;以及确保网络安全&#xff0c;是它们成功的…

无线通信信号流程简略

无线通信的基本原理是发射和接收&#xff0c;这是一个消息从一个地方传输到想要传输的地方的实现支撑&#xff0c;整个过程的信息传送大致是这样的&#xff0c;首先我们要传的信息&#xff08;文字、图片、视频等&#xff09;在发射模块中进行转换&#xff0c;将信息转换为基带…

微信小程序留言板

需求分析 留言板是一款能实现浏览留言、发表留言、删除留言和编辑留言的小程序&#xff0c;用户能够浏览当前的已留言内容&#xff0c;并且能按照时间的升序来查看最新的留言内容&#xff1b;能够发表自己的留言内容&#xff0c;在留言发表页填写相关项后即可发表&#xff0c;…

audio 音频标签详解

audio标签详解&#xff08;属性js操作生命周期播放事件&#xff09;_js audio-CSDN博客

PHP类和对象概念及用法

类和对象的关系 可以将类看成为一件模具&#xff0c;倒入不同的材料(属性和方法)&#xff0c;这些材料用于构建独特的对象 类的基本组成部分 属性:类中的变量&#xff0c;用于储存数据 方法&#xff1a;类中的函数&#xff0c;用于操作和访问类的属性 类及其属性和方法的创建…

VS清除不必要的

//.$|/*(*(?!/)|[^])**/

《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》

在当今数字化时代&#xff0c;信息技术中心&#xff08;IT Center&#xff09;扮演着至关重要的角色&#xff0c;它不仅是企业的技术支撑&#xff0c;更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战&#xff0c;许多企业开始探索一体化系统架构&#x…