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

React-2-useState-获取DOM-组件通信

一.useState

useState 是一个 React Hook(函数),它允许我们向组件添加一个状态变量, 从而控制影响组件的渲染结果

本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会跟着变化**(数据驱动视图)**

  const [count, setCount] = useState(0)
  1. useState是一个函数,返回值是一个数组
  2. 数组中的第一个参数是状态变量,第二个参数是set函数用来修改状态变量
  3. useState的参数将作为count的初始值
1.1 修改状态的规则

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

   let [count, setCount] = useState(0)const handleClick = () => {// 直接修改 无法引发视图更新// count++// console.log(count)setCount(count + 1)}

class组件中this.setState更新是state是合并, hook中 useState中setState是替换

修改对象状态

// 修改对象状态const [form, setForm] = useState({ name: 'jack' })const changeForm = () => {// 错误写法:直接修改  不引发视图变化// form.name = 'john'// 正确写法:setFrom 传入一个全新的对象setForm({...form,name: 'john'})}

二.受控表单绑定

vue中的双向数据绑定

// 1. 通过value属性绑定react状态
// 2. 绑定onChange事件 通过事件参数e拿到输入框最新的值 反向修改到react状态身上function App () {const [value, setValue] = useState('')return (<div><inputvalue={value}onChange={(e) => setValue(e.target.value)}type="text" /></div>)
}

三. React中获取DOM

在 React 组件中获取/操作 DOM,需要使用 useRef React Hook钩子函数

  1. 使用useRef创建 ref 对象,并与 JSX 绑定
  2. 在DOM可用时,通过 inputRef.current 拿到 DOM 对象
// 1. useRef生成ref对象 绑定到dom标签身上
// 2. dom可用时,ref.current获取dom
// 渲染完毕之后dom生成之后才可用
function App () {const inputRef = useRef(null)const showDom = () => {console.dir(inputRef.current)}return (<div><input type="text" ref={inputRef} /><button onClick={showDom}>获取dom</button></div>)
}

四. 组件通信

4.1 父传子-props

props可传递任意的数据
数字、字符串、布尔值、数组、对象、函数、JSX

	 <Sonname={name}age={18}isTrue={false}list={['vue', 'react']}obj={{ name: 'jack' }}cb={() => console.log(123)}child={<span>this is span</span>}><p>33</p></Son>

子组件只能读取props中的数据,不能直接进行修改, 父组件的数据只能由父组件修改

4.2 子传父

核心思路:在子组件中调用父组件中的函数并传递参数

 <Son onGetSonMsg={getMsg} /><div>this is Son<button onClick={() => onGetSonMsg('this is son msg')}>sendMsg</button></div>
4.3.兄弟组件通信

使用状态提升实现兄弟组件通信

  1. A组件先通过子传父的方式把数据传给父组件App
  2. App拿到数据后通过父传子的方式再传递给B组件
4.4.跨层传递数据

使用Context机制跨层级组件通信

实现步骤:

  1. 使用createContext方法创建一个上下文对象Ctx
  2. 在顶层组件(App)中通过 Ctx.Provider 组件提供数据
  3. 在底层组件(B)中通过 useContext 钩子函数获取消费数据
// App -> A -> B
import { createContext, useContext } from "react"
// 1. createContext方法创建一个上下文对象
const MsgContext = createContext()
// 2. 在顶层组件 通过Provider组件提供数据
// 3. 在底层组件 通过useContext钩子函数使用数据
function App () {const msg = 'this is app msg'return (<div><MsgContext.Provider value={msg}>this is App<A /></MsgContext.Provider></div>)
}
function A () {return (<div>this is A component<B /></div>)
}function B () {const msg = useContext(MsgContext)return (<div>this is B compnent,{msg}</div>)
}

相关文章:

React-2-useState-获取DOM-组件通信

一.useState useState 是一个 React Hook&#xff08;函数&#xff09;&#xff0c;它允许我们向组件添加一个状态变量, 从而控制影响组件的渲染结果 本质&#xff1a;和普通JS变量不同的是&#xff0c;状态变量一旦发生变化组件的视图UI也会跟着变化**&#xff08;数据驱动视…...

使用nodejs搭建脚手架工具并发布到npm中

使用nodejs搭建脚手架工具并发布到npm中 一、安装环境依赖及脚手架搭建过程二、搭建Monorepo 风格的脚手架工程三、脚手架的必备模块命令参数模块获取命令参数设置子命令用户交互模块文件拷贝模块脚手架中的路径处理目录守卫文件拷贝模块动态文件生成模块mustache简介自动安装依…...

【面经】3月29日 美团/美团平台/后端/一面/1h

面试官先介绍自己部门的业务&#xff1a;存储中心&#xff0c;涉及到大量数据的离线处理&#xff08;亿级别&#xff09;。 手撕&#xff08;删除链表倒数第k个节点&#xff09; 自我介绍 项目介绍&#xff08;还没说完被打断了&#xff0c;面试官说你这个感觉就是把功能说了一…...

CSS:CSS的基础了解

css概述 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09; 是用于控制网页样式和布局的一种样式表语言。用于描述网页的样式和布局&#xff0c;包括字体、颜色、大小、间距、边框等方面。 前端三&#x1f5e1;客&#xff1a;HTML,CSS,JavaScript&am…...

Android Framework学习笔记(2)----系统启动

Android系统的启动流程 启动过程中&#xff0c;用户可控部分是framework的init流程。init是系统中的第一个进程&#xff0c;其它进程都是它的子进程。 启动逻辑源码参照&#xff1a;system/core/init/main.cpp 关键调用顺序&#xff1a;main->FirstStageMain->SetupSel…...

项目管理中的估算活动资源

在项目管理中,资源估算是一项至关重要的任务。正确地估算活动资源可以确保项目的顺利进行,避免资源浪费和不必要的延误。以下是对项目管理中常见的活动资源类型的详细分析。 一、人力资源 人力资源是项目管理中最基本的资源之一。它包括项目团队成员的技能、知识和经验。在…...

java中的set集合及其子类

Set系列集合&#xff1a;添加的元素是无序&#xff08;添加的数据的顺序和获取出数据顺序不一样&#xff09;&#xff0c;不重复&#xff0c;无索引 如&#xff1a;HashSet:无序&#xff0c;不可重复&#xff0c;无索引 LinkedHashSet:有序&#xff0c;不重复&#xff0c;无索…...

shell脚本查询匹配文件进行操作

1.寻找文件并赋权 查询当前目录及子目录下所有以“sh”结尾的文件&#xff0c;并赋执行权限。 #!/bin/bash # 将当前目录及子目录下所有以“sh”结尾的文件添加可执行权限 find ./ -name "*.sh" -type f -exec chmod x {} 2.寻找文件并删除 查询当前目录及子目录下存…...

vulnhub----natraj靶机

文章目录 一.信息收集1.网段探测2.端口扫描3.版本服务探测4.漏扫5.目录扫描 二.漏洞利用1.分析信息2..fuzz工具 三.getshell四.提权六.nmap提权 一.信息收集 1.网段探测 因为使用的是VMware&#xff0c;靶机的IP地址是192.168.9.84 ┌──(root㉿kali)-[~/kali/vulnhub] └─…...

Web Component 组件库有什么优势

前言 前端目前比较主流的框架有 react&#xff0c;vuejs&#xff0c;angular 等。 我们通常去搭建组件库的时候都是基于某一种框架去搭建&#xff0c;比如 ant-design 是基于 react 搭建的UI组件库&#xff0c;而 element-plus 则是基于 vuejs 搭建的组件库。 可能你有这种体…...

如何配置vite的proxy

1.前言 vite项目&#xff0c;本地开发环境可以通过配置proxy代理实现跨域请求。但是生产环境&#xff0c;该配置不生效&#xff0c;一般使用 nginx 转发&#xff0c;或者后端配置cors 2.解释 server: {port: 9000,proxy: { // 本地开发环境通过代理实现跨域&#xff0c;生产…...

Linux CentOS基础操作

Linux CentOS基础操作 1. 查看Linux服务器当前主机名等 hostname 2. 查看当前系统日期和时间 date -d -y 3. 显示网络接口信息&#xff0c;获取当前网卡状态&#xff0c;启动、停止网卡&#xff0c;网卡等闪烁显示30秒&#xff0c;配置网卡(网卡名称&#xff1a;eth1)的IP地址…...

最佳情侣身高差

题目描述 专家通过多组情侣研究数据发现&#xff0c;最佳的情侣身高差遵循着一个公式&#xff1a;&#xff08;女方的身高&#xff09;1.09 &#xff08;男方的身高&#xff09;。如果符合&#xff0c;你俩的身高差不管是牵手、拥抱、接吻&#xff0c;都是最和谐的差度。 下面…...

谷歌开发者账号防关联:如何选择性价比高的VPS,阿里、腾讯、酷鸟、AWS?

在Google Play上架应用的开发者朋友们&#xff0c;可能需要多个开发者账号来上架马甲包或矩阵式上架应用。但谷歌那边又不让一个人搞多个账号&#xff0c;所以&#xff0c;要想不被谷歌抓包&#xff0c;就得做好防关联的功课&#xff0c;确保每个账号都像是独立的个体。 而说到…...

Virtual digital asset $E=$eaco. EarthChain

Virtual digital asset $E$eaco. EarthChain Виртуальный цифровой актив $E $eaco. Цепочка Земля. 仮想デジタル資産$E$eaco.アースチェーン. Activos digitales virtuales $e $oaco. cadena terrestre. Virtuelles digitales Asset $E…...

[计算机网络] 当输入网址到网页

HTTP 首先&#xff0c;对URL进行解析&#xff0c;URL包含了Web服务器和对应的文件&#xff08;文件路径&#xff09; URL是请求服务器中的文件资源 通过Web服务器和对应文件来生产HTTP包&#xff08;超文本传输协议&#xff09; DNS 根据域名查询对应的IP地址 域名的层级 根…...

五年经验,还不懂小表驱动大表

小表驱动大表&#xff0c;也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表&#xff0c;其中order表有10000条数据&#xff0c;而user表有100条数据。 这时如果想查一下&#xff0c;所有有效的用户下过的订单列表。可以使用in关键字实现&#xff1a; select…...

springboot+websocket+微信小程序实现评论区功能

springbootwebsocket微信小程序实现评论区功能 WebSocketSTOMP协议具体实现1.在pom文件中添加Spring WebSocket依赖2. 创建WebSocket配置类3.接收发送消息4.前端 参考 WebSocket 1. 什么是WebSocket&#xff1f; WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双…...

【项目】如何在面试中介绍自己的项目经验(附如何解决未知的问题成长路线)

【项目】如何在面试中介绍自己的项目经验&#xff08;附如何解决未知的问题&成长路线&#xff09; 文章目录 1、为什么要准备项目介绍&#xff1f;2、如何准备一份好的项目介绍&#xff1f;3、如何回答项目提问&#xff1f;4、如何避免低级错误&#xff1f;5、如何通过引导…...

解决Selenium元素拖拽不生效Bug

前几天在使用Selenium进行元素拖拽操作时&#xff0c;发现Selenium自带的元素拖拽方法&#xff08;dragAndDrop()&#xff09;不生效&#xff0c;网上的回答也是五花八门&#xff0c;比较混乱&#xff0c;尝试了以下几种方法均无法解决。 方案1&#xff1a;通过dragAndDrop()方…...

RPG Maker MV Decrypter:解决游戏资源保护与合法访问的技术平衡方案

RPG Maker MV Decrypter&#xff1a;解决游戏资源保护与合法访问的技术平衡方案 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: ht…...

用Python lifetimes库实战:手把手教你用BG/NBD+Gamma-Gamma模型预测电商用户未来3个月价值

用Python lifetimes库实战&#xff1a;电商用户价值预测的极简指南 电商行业的核心挑战之一是如何精准识别高价值用户。想象一下&#xff0c;你手头有一份过去12个月的交易数据&#xff0c;老板要求你在下周的预算会议前&#xff0c;预测未来三个月哪些用户最值得投入营销资源。…...

自指系统在生命科学领域的机制与原理(世毫九实验室科普系列)

自指系统在生命科学领域的机制与原理&#xff08;世毫九实验室科普系列&#xff09; 作者&#xff1a;方见华 单位&#xff1a;世毫九实验室 1. 引言&#xff1a;自指系统的概念界定与研究意义 1.1 自指系统的定义与特征 自指系统&#xff08;Self-referential Systems&#xf…...

告别wx.startRecord!微信小程序录音功能保姆级教程(RecorderManager全解析)

微信小程序录音功能深度重构指南&#xff1a;从wx.startRecord到RecorderManager的完整迁移方案 在微信小程序开发生态中&#xff0c;音频处理能力一直是实现丰富交互体验的核心组件之一。随着技术架构的持续优化&#xff0c;微信团队对录音API进行了重大升级&#xff0c;用更现…...

[STM32U3] 【STM32U385RG 测评】+ PWM调节控制LED

在厂家提供的例程中&#xff0c;提供了多个PWM通道输出固定占空比的示例&#xff0c;但缺少改变占空比的介绍。为此&#xff0c;作了一下自动改变占空比和按键改变占空比的尝试。这采用的是以PWM通道1输出脉冲来控制外挂LED模块的亮度&#xff0c;通道1的输出引脚为PA0&#xf…...

TVA智能体范式的工业视觉革命(5)

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

NotebookLM赋能电影学研究(2024年唯一经实证验证的学术工作流)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM赋能电影学研究&#xff08;2024年唯一经实证验证的学术工作流&#xff09; NotebookLM 是 Google 推出的基于用户上传文档进行语义理解与推理的 AI 助手&#xff0c;其“引用溯源”与“片段锚定”…...

魔兽争霸III终极优化指南:7个实用方案让经典游戏完美适配现代硬件

魔兽争霸III终极优化指南&#xff1a;7个实用方案让经典游戏完美适配现代硬件 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为一款经典…...

VScode:将VScode界面的显示语言改为简体中文

这是 VS Code 设置语言的标准方式&#xff0c;直接强制指定界面语言&#xff1a; 在 VS Code 界面按下快捷键 Ctrl Shift P&#xff08;Windows/Linux&#xff09;&#xff0c;Mac 用户用 Cmd Shift P&#xff0c;打开「命令面板」 在弹出的输入框里&#xff0c;输入 Confi…...

insert_order 报单类型怎么选:限价、FAK 与 FOK 期货场景

前言 在天勤量化里&#xff0c;insert_order 是程序化下单的核心接口。报单类型选错&#xff0c;常见后果是撤单狂增、部分成交后敞口裸露&#xff0c;或回测里假设能成交而实盘挂在板上。下面按期货里常用的限价、FAK、FOK 等说明适用场景&#xff0c;并给出最小调用片段。 …...