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

【React】二、状态变量useState

文章目录

  • 1、React中的事件绑定
    • 1.1 基础事件绑定
    • 1.2 使用事件对象参数
    • 1.3 传递自定义参数
    • 1.4 同时传递事件对象和自定义参数
  • 2、React中的组件
  • 3、useState

1、React中的事件绑定

1.1 基础事件绑定

语法:on + 事件名称 = { 事件处理程序 },整体上遵循驼峰命名法

function App() {const handleClick = () => {console.log("button被点击了")}return (<button onClick={handleClick}> click here</button>);
}

在这里插入图片描述

1.2 使用事件对象参数

语法:在事件回调函数中设置形参e

在这里插入图片描述

在这里插入图片描述

1.3 传递自定义参数

语法:事件绑定的位置改造成箭头函数的写法,在执行clickHandler实际处理业务函数的时候传递实参
在这里插入图片描述

注意:不能直接写函数调用,这里事件绑定需要一个函数引用 () =>

1.4 同时传递事件对象和自定义参数

语法:在事件绑定的位置传递事件实参e和自定义参数,clickHandler中声明形参,注意顺序对应

在这里插入图片描述

2、React中的组件

一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以互相嵌套,也可以复用多次。如一个资讯类的网页,组件化之后:
在这里插入图片描述

组件化开发可以让开发者像搭积木一样构建一个完整的庞大的应用

在这里插入图片描述

// function定义组件
function Button() {// 组件内部的逻辑return <button>click here!</button>
}// 箭头函数也可以定义组件
const Button2 = () => {// 组件内部的逻辑return <button>click here!</button>
}
function App() {return (<div className="App">{/*组件的使用方式一:自闭和*/}<Button/><Button2/>{/*组件的使用方式二:成对标签*/}<Button></Button><Button2></Button2></div>)
}

效果:

在这里插入图片描述

3、useState

关键点:

  • 调用useState函数,可以添加一个状态变量
  • 修改状态变量的值,视图就会重新渲染

在这里插入图片描述

使用useState实现一个计数器按钮:重点体会useState重新使用新的count渲染UI的亮点

import {useState} from "react";function App() {// 1. 调用useState定义一个变量,并初始化为0// count即状态变量// setCount即状态变量的更新函数const [count, setCount] = useState(0)// 2.定义点击事件回调函数const handleClick = () => {// 使用setCount,一来修改count值,二来重新使用新的count渲染UIsetCount(count + 1)}return (<div className="App"><button onClick={handleClick}>{count}</button></div>)
}

在这里插入图片描述

在React中,状态被认为是只读的,我们应该始终替换它而不是修改它,直接修改状态不能引发视图更新,必须是调用useState的setCount方法

在这里插入图片描述

同理,对于一个对象类型的状态变量,应该始终传给set方法一个全新的对象来进行修改

在这里插入图片描述

// 错误示范
function App() {const [form, setForm] = useState({name: 'Jack'})const changeForm = () => {form.name = 'Tom'}return (<div className="App"><button onClick={() => changeForm}>{form.name}</button></div>)
}

修改:

const changeForm = () => {// 错误写法,直接修改//form.name = 'Tom'// 正确写法,setForm传入一个全新的对象setForm({...form,name: 'Tom'})
}
http://www.lryc.cn/news/497669.html

相关文章:

  • SQL Server中的数据处理函数:提升SQL查询能力
  • TypeScript 语言学习入门级教程五
  • 上海市计算机学会竞赛平台2022年7月月赛丙组匹配括号(三)
  • 108.【C语言】数据结构之二叉树查找值为x的节点
  • Java学习笔记(10)--面向对象基础
  • 社群分享在商业引流与职业转型中的作用:开源 AI 智能名片 2+1 链动模式小程序的应用契机
  • nodejs官方文档学习-笔记-1
  • android视频播放器之DKVideoPlayer
  • Linux——基础命令(3)
  • MySQL备份恢复
  • 鲲鹏麒麟安装离线版MySQL5.7
  • 【不稳定的BUG】__scrt_is_managed_app()中断
  • MyBatis 详解
  • Cursor+Devbox AI开发快速入门
  • 编写按层次顺序(同一层自左至右)遍历二叉树的算法。或:按层次输出二叉树中所有结点;
  • docker 安装mysql8.0.29
  • vue深入理解输入框字符限制的优化设计
  • 完整指南:在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK
  • 【Leetcode Top 100】138. 随机链表的复制
  • 2024年12月HarmonyOS应用开发者基础认证全新题库
  • Flink问题总结
  • Day17 C++ vector 容器
  • 常见Linux命令(详解)
  • AgGrid 组件封装设计笔记:自定义 icon 以及每个 icon 的点击事件处理
  • vb.net常用命名空间
  • Netty面试内容整理-Netty 工作原理
  • CMD 介绍
  • 【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器
  • Android 使用TabLayout + ViewPager2 实现标签页的视图切换
  • vue 项目实现阻止浏览器记住密码