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

React 组件的基本使用,useState 状态变量的使用

React 组件

组件是什么

##### 概念:一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以相互嵌套,也可以多次复用。

React,一个组件就是首字母大写的函数,内部存放了组件的逻辑和视图 UI,渲染组件只需要把组件当成标签书写即可


// 定义一个组件
function MyButton() {// 组件的内部逻辑和视图 UIreturn <button>Click me</button>
}// 使用组件
function App() {return (<div><MyButton /></div>)
}

## `useState`的基础使用

useState是React提供的Hook,可以让我们在函数组件中维护状态。

它允许我们向组件添加一个状态变量,从而控制影响组件的渲染结果。

本质:和普通 js 变量不同,状态变量一旦发生变化组件的视图UI也会跟着变化
/*** 项目的根组件** useState 状态管理** 实现一个计数器按钮*/import { useState } from "react";export default function App() {// 1. 调用 useState 状态管理函数,创建计数器状态和更新计数器状态的函数const [count, setCount] = useState(0);// 2. 实现计数器按钮的点击事件const handleClick = () => {/*** 作用:1. 用传入的新值修改 count*       2. 重新使用新的 count 值渲染组件*/setCount(count + 1);};// 3. 渲染计数器按钮和当前计数器值return (<div><h1>计数器:{count}</h1><button onClick={handleClick}>点击增加</button></div>);
}
  1. useState 是一个函数,返回值是一个数组。
  2. 数组中的第一个参数是状态变量,第二个参数是 set 函数,用来更新状态变量。
  3. useState 的参数将作为 count 的初始值。

useState 的修改状态规则

状态不可变

React 中,状态被认为是只读的,我们应该始终替换他而不是修改它,直接修改状态不能引发视图更新

const [count, setCount] = useState(0);const handleClick = () => {// count++; // 错误,不能直接修改状态/*** 作用:*  1.用传入的新值修改 count*  2.重新使用新的 count 值渲染组件*/setCount(count + 1);
}
修改对象状态

##### 规则:对于对象类型的状态变量。应该始终传给 set 函数一个新的对象来进行修改。

const [obj, setObj] = useState({ name: "张三", age: 20 });const handleClick = () => {// 错误,不能直接修改对象// obj.name = 'Join'// 正确,传给 set 函数一个新的对象setObj({...obj, name: 'Join' });
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 万字长文 | Apache开源社区出海的“踩坑”之路,看完这3点你就明白了
  • SpringSecurity原理解析(五):HttpSecurity 类处理流程
  • 汽车无钥匙启动功能工作原理
  • vscode任务配置之tasks.json
  • 一位10块!餐厅的白开水,也开始收钱了……
  • 〖open-mmlab: MMDetection〗解析文件:mmdet/models/roi_heads/bbox_heads/bbox_head.py
  • 【安全系列--处理挖矿】
  • 解析主子格式的 csv
  • 基于Java+ssm+jsp开发的相亲交友网站管理系统
  • Oracle rman 没有0级时1级备份和0级大小一样,可以用来做恢复 resetlogs后也可以
  • 源代码如何防泄漏?用对软件真的很重要!
  • BRAS介绍
  • 中间件的学习理解总结
  • Go语言中的队列与栈:基础与实践
  • C语言深入理解指针四(17)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 0基础学习移动端适配
  • Android系统模拟器绘制实现概述
  • Git初体验
  • js操作时间(持续更新)
  • leetcode388. Longest Absolute File Path
  • nginx 负载服务器优化
  • PHP那些事儿
  • Puppeteer:浏览器控制器
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring Cloud中负载均衡器概览
  • Vue组件定义
  • Webpack 4 学习01(基础配置)
  • 安卓应用性能调试和优化经验分享
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 使用Gradle第一次构建Java程序
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 一道面试题引发的“血案”
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​iOS实时查看App运行日志
  • ​第20课 在Android Native开发中加入新的C++类
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #每天一道面试题# 什么是MySQL的回表查询
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (27)4.8 习题课
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (三分钟)速览传统边缘检测算子
  • (十六)视图变换 正交投影 透视投影
  • (转)树状数组
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .net 调用php,php 调用.net com组件 --
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NetCore项目nginx发布
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET文档生成工具ADB使用图文教程