react的组件
组件
组件是用来实现局部功能的代码和资源的集合(html/css/js),用来复用代码。
react中分为函数式组件和类式组件。函数式组件就是一个函数,函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类,类式组件通过render函数返回视图内容。
函数式组件
function Good(){return <div><h1>news</h1></div>
}
类式组件
类式组件必须继承React.Component
class Good extends React.Component{}
- React解析组件标签,找到Good组件
- 发现组件是使用类定义的,随后new出来该类的实例,并通过该类实例调用到原型上的render()
- 将render返回的虚拟DOM转为真实DOM,随后呈现在页面中
简单组件和复杂组件
如果一个组件有状态就是复杂组件,如果一个组件没有状态就是简单组件。
组件实例的属性
组件实例属性包含state、props、refs这三个常用的属性。其中refs只能在类组件中使用,如果在函数式组件中想要使用refs需要使用其他的api获取元素引用。
state
state是组件对象最重要的属性,值是对象。组件被称为状态机,通过更新组件的state来更新对应的页面显示。
状态必须通过setState修改,setState()接收一个对象,对象中设置需要更改的key和value。
class Demo extends React.Component{state = {description:'hello'}handleClick(){this.setState({descriptin:'hello'}); }render(){return <div><span>{this.state.description}</span><button onClick={this.handleClick}>change</button></div>}
}
props
组件实例属性props指的是从外部传递给组件的值,props在组件内部是只读的,不能通过this.props.xxx修改。
class Person extends React.Component{render(){const {name,age,sex} = this.props;return <><ul><li>{name}</li><li>{age}</li><li>{sex}</li></ul></>}
}
我们可以通过propsTypes限制props的类型,通过defaultProps设置props的默认值。propsTypes和defaultProps都是类的静态成员,除了直接使用Person设置之外还可以通过类的语句块中通过static关键字设置。
// 限制props的类型
Person.propTypes = {name:PropTypes.string,age:PropTypes.number,sex:PropTypes.string
}
// 设置props的默认值
Person.defaultProps = {name:'hello'
}
// 向组件传递props
React.render(<Person name="Tom" age={18} sex="Man" />,document.getElementById('app'));
let p = {name:"Tom", age:18, sex:"Man"
}
React.render(<Person {...p}/>,document.getElementById('test'));
static关键字设置propsTypes
class Person extends React.Component{static propsTypes = {name:PropTypes.string,age:PropTypes.number,sex:PropTypes.string}static defaultProps = {name:'hello'}render(){return <div>// ...</div>}
}
refs
组件实例属性refs,refs指的是获取元素的引用。通过给元素设置ref属性得到其引用。refs从使用方式上分为字符串类型、函数类型。字符串类型的如下所示:
class Person extends React.Component{render(){return <><input ref="input_left" type="text" placeholder="点击按钮提示数据" /><button onClick={this.tooltip}>点击提示数据</button><input ref="input_right" type="text" placeholder="失焦提示数据" /></>}
}
回调函数形式的refs
回调形式的ref在更新时会执行两次,第一次会传递一个null,第二次才会传递元素。这是因为在更新时会实例化一个新的对象,并重新渲染。
回调函数分为内联的回调函数和类绑定的回调函数
class Person extends React.Component {state = {}static propTypes = {name: PropTypes.string,age: PropTypes.number,gender: PropTypes.string}static defaultProps = {name: 'hello'}constructor(props) {super(props);}tooltip = (e)=>{alert(this.input_left.value)}toolTipRight = () => {alert(this.input_right.value)}render() {return <div><input ref={(el) => {this.input_left = el;}} type="text" placeholder="点击按钮提示数据" /><button onClick={this.tooltip}>点击提示数据</button><input ref={(el) => {this.input_right = el;}} onBlur= {this.toolTipRight} type="text" placeholder="失焦提示数据" /></div>}}
createRef的refs
除了上面的方式之外,还可以通过createRef创建容器,然后获取元素的引用。
class Person extends React.Component {myRef = React.createRef()myRef2 = React.createRef()state = {}constructor(props) {super(props);}tooltip = (e)=>{console.log(this.myRef)alert(this.myRef.current.value);}toolTipRight = () => {alert(this.myRef2.current.value);}render() {return <div><input ref={this.myRef} type="text" placeholder="点击按钮提示数据" /><button onClick={this.tooltip}>点击提示数据</button><input ref={this.myRef2} onBlur={this.toolTipRight} type="text" placeholder="失焦提示数据" /></div>}}
事件处理
通过onXxx属性指定事件处理函数。
- React使用的是自定义事件,不是原生事件。为了更好的兼容性
- React中的事件是通过委托方式处理的。为了高效
通过event.target得到发生的事件的DOM元素对象
受控组件
页面中所有输入类的DOM,随着输入把数据存入state就是受控组件。
class Login extends React.Component {state = {userName:'',password:''}submit=(e)=>{e.preventDefault();const {userName,password} = this.state;}saveFormData = (key) => {return (e) => {this.setState({[key]: e.target.value});}}render() {return <form action="" onSubmit={this.submit}>用户名<input ref={(el) => this.userNameInput = el} onChange={this.saveFormData('userName')} type="text" name="username" />密码<input ref={(el) => this.passwordInput = el} onChange={this.saveFormData('password')} type="password" name="password" /> <button>登录</button></form>}}
相关文章:
react的组件
组件 组件是用来实现局部功能的代码和资源的集合(html/css/js),用来复用代码。 react中分为函数式组件和类式组件。函数式组件就是一个函数,函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类,类…...
低功耗引擎Cliptrix为什么可以成为IOT的高效能工具
在万物互联的时代,现代人已普遍接受电视、音箱等电器设备具备智能化能力,也是在这个趋势下,我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点,例如iot设备的内存、处理器等核心元件无法与手机…...
深入学习git
1、git原理及整体架构图 一些常用的命令 git add . 或 git add src/com/ygl/hello/hello.java 指定文件 git commit . 或 git commit src/com/ygl/hello/hello.java 指定文件 git push origin 分支名称 2、git stash的应用场景 场景一:你正在当前分支A开发&…...
第9章 Mybatis
9.1 谈谈你对Mybatis的理解 难度:★★ 重点:★★ 白话解析 说清楚Mybatis是什么,它的工作流程,然后再对比一下Hibernate就好了。 1、Mybatis是什么:它一个半自动ORM框架,它底层把JDBC那套加载驱动、创建连接、创建statement等重复性的硬编码全部给你封装好了,程序员只…...
隐蔽通信论文复现
文章目录 前言一、Limits of Reliable Communication with Low Probability of Detection on AWGN Channels摘要introduction 前言 本文准备先考虑隐蔽中通信经典的Alice, Bob, Willie三点模型, 总结出其中的经典套路 一、Limits of Reliable Communication with Low Probabil…...
《Vue.js+Spring Boot全栈开发实战》简介
大家好,我是老卫。 恰逢中秋国庆双节,不想出门看人山,惟愿宅家阅书海! 今天开箱的这本书是《Vue.jsSpring Boot全栈开发实战》。 外观 从书名故名思议,就是基于Vue.jsSpring Boot来实现企业级应用全栈开发。 该书由…...
机器人中的数值优化(二十)——函数的光滑化技巧
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
搭建全连接网络进行分类(糖尿病为例)
拿来练手,大神请绕道。 1.网上的代码大多都写在一个函数里,但是其实很多好论文都是把网络,数据训练等分开写的。 2.分开写就是有一个需要注意的事情,就是要import 要用到的文件中的模型或者变量等。 3.全连接的回归也写了&#…...
【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)
文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…...
Verasity Tokenomics — 社区讨论总结与下一步计划
Verasity 代币经济学的社区讨论已结束。 本次讨论从 8 月 4 日持续到 9 月 29 日,是区块链领域规模最大的讨论之一,超过 500,000 名 VRA 持有者和社区成员参与讨论,并收到了数千份回复。 首先,我们要感谢所有参与讨论并提出详细建…...
JUC第十三讲:JUC锁: ReentrantLock详解
JUC第十三讲:JUC锁: ReentrantLock详解 本文是JUC第十三讲,JUC锁:ReentrantLock详解。可重入锁 ReentrantLock 的底层是通过 AbstractQueuedSynchronizer 实现,所以先要学习上一章节 AbstractQueuedSynchronizer 详解。 文章目录 …...
WSL2安装历程
WLS2安装 1、系统检查 安装WSL2必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。 查看 Windows 版本及内部版本号,选择 Win R,然后键入winver。 2、家庭版升级企业版 下载HEU_KMS_Activ…...
Ubuntu20配置Mysql常用操作
文章目录 版权声明ubuntu更换软件源Ubuntu设置静态ipUbuntu防火墙ubuntu安装ssh服务Ubuntu安装vmtoolsUbuntu安装mysql5.7Ubuntu安装mysql8.0Ubuntu卸载mysql 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程…...
【解决方案】‘create’ is not a member of ‘cv::aruco::DetectorParameters’
‘create’ is not a member of ‘cv::aruco::DetectorParameters’ 在构建AruCo标定板标定位姿代码的过程中,发现代码中认为create并不是aruco::DetectorParameters的成员函数,这是因为在4.7.0及以上的OpenCV版本中,对ArUco的代码做调整&…...
门牌制作(蓝桥杯)
门牌制作 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作 0 到 9 这几个数字字…...
支付宝支付模块开发
生成二维码 使用Hutool工具类生成二维码 引入对应的依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.5</version> </dependency><dependency><groupId>com.go…...
12、Kubernetes中KubeProxy实现之iptables和ipvs
目录 一、概述 二、iptables 代理模式 三、iptables案例分析 四、ipvs案例分析 一、概述 iptables和ipvs其实都是依赖的一个共同的Linux内核模块:Netfilter。Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供…...
从0开始python学习-29.selenium 通过cookie信息进行登录
1. 手动输入cookie信息保持登录状态 url https://test.com/login driver.get(url) # 手动将cookie信息写入(有多个的情况需要分开写入)--弊端为需要每次都手动输入,很麻烦不适用 driver.add_cookie({"name": "SIAM_IMAGE_…...
CentOS安装OpenNebula(二)
被控端部署: 先要配置好yum源: [rootmaster yum.repos.d]# vim opennebula.repo[rootmaster yum.repos.d]# cat opennebula.repo [opennebula] nameopennebula baseurlhttps://downloads.opennebula.org/repo/5.6/CentOS/7/x86_64 enabled1 gpgkeyhttps…...
力扣第239题 c++滑动窗口经典题 单调队列
题目 239. 滑动窗口最大值 困难 提示 队列 数组 滑动窗口 单调队列 堆(优先队列) 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的…...
流程可视化引擎定制指南:从技术实现到业务价值转化
流程可视化引擎定制指南:从技术实现到业务价值转化 【免费下载链接】Drawflow Simple flow library 🖥️🖱️ 项目地址: https://gitcode.com/gh_mirrors/dr/Drawflow 在数字化转型过程中,企业面临着业务流程可视化与实际业…...
洛谷 P1833:樱花 ← 混合背包(01 + 完全 + 多重)
【题目来源】 https://www.luogu.com.cn/problem/P1833 【题目描述】 爱与愁大神后院里种了 n 棵樱花树,每棵都有美学值 Ci(0<Ci≤200)。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍…...
ae新手福音,用快马平台ai生成带注释的片段视频代码轻松入门
作为一个刚接触AE的新手,第一次打开软件时确实被复杂的界面吓到了。各种面板、时间轴、效果控件看得眼花缭乱,更别说要自己写表达式了。直到发现了InsCode(快马)平台,用自然语言描述就能生成带详细注释的AE项目代码,简直是新手的救…...
WebGLInput:重构Unity WebGL输入体验的革命性方案
WebGLInput:重构Unity WebGL输入体验的革命性方案 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 在Unity WebGL开发中,输入法支持一直是开发者面临的核心挑战之一。WebGLInput项目通…...
STM32串口环形队列IAP固件更新方案
基于STM32串口环形队列的IAP实现方案1. 项目概述1.1 系统架构本方案实现了一种基于STM32F103C8T6微控制器的串口IAP(In-Application Programming)系统,采用环形队列缓冲机制解决有限SRAM空间下的固件更新问题。系统将64KB Flash空间划分为四个功能区域:B…...
一条命令搞定STM32程序下载:OpenOCD program命令的隐藏用法与避坑指南
STM32极速烧录秘籍:OpenOCD program命令高阶玩法全解析 每次调试STM32都要重复点击IDE的下载按钮?CI/CD流水线卡在烧录环节?是时候解锁OpenOCD的program命令了——这个被低估的"瑞士军刀"能让你用一行命令完成擦除、烧录、校验、复…...
从浮点到定点:手把手教你用MATLAB自定义函数实现加减乘除(避坑溢出与精度损失)
从浮点到定点:手把手教你用MATLAB自定义函数实现加减乘除(避坑溢出与精度损失) 当算法需要从实验室环境迁移到嵌入式设备时,浮点运算的硬件开销常常成为瓶颈。这时定点数运算就像一把手术刀——精准控制每个比特的用途,…...
Qwen2.5-VL-7B-Instruct应用场景:跨境电商商品图自动打标+多语种描述生成
Qwen2.5-VL-7B-Instruct应用场景:跨境电商商品图自动打标多语种描述生成 1. 跨境电商的痛点与解决方案 跨境电商卖家每天面临两个核心挑战:商品图片标注和多语言描述撰写。传统方式需要人工逐张图片添加标签,再用翻译工具转换语言ÿ…...
深入浅出ESP32蓝牙HID协议:从报文解析到游戏手柄开发
深入浅出ESP32蓝牙HID协议:从报文解析到游戏手柄开发 在物联网设备与人机交互技术深度融合的今天,蓝牙HID协议已成为连接智能硬件与终端设备的重要桥梁。ESP32作为一款集成Wi-Fi和蓝牙双模通信的微控制器,凭借其出色的性价比和丰富的开发资源…...
GitHub下载加速终极指南:告别龟速,3分钟让下载速度飙升300%
GitHub下载加速终极指南:告别龟速,3分钟让下载速度飙升300% 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub …...
