【React基础二】事件绑定、组件props、条件渲染、列表、refs、组件声明周期

文章目录

    • 1. 事件绑定
    • 2. 组件props
    • 3. 条件渲染
      • 3.1 基本概述
      • 3.2 三目运算
    • 4. 列表
    • 5. Refs
      • 5.1 概述
      • 5.2 引用传递 Forwarding Refs
    • 6. 组件生命周期

1. 事件绑定

React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同:

  1. React 事件绑定属性的命名采用驼峰式写法,而不是小写。
  2. 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数
    <button onClick={()=>{this.tick()}}>增加
    </button>
    

在通过Class创建的组件内,想要使用this调用函数,可以在构造函数内bind this对象为当前this,也可以在绑定处使用this调用

class App extends React.Component{constructor(props){super(props)this.state = {age:this.props.age}this.ageChange = this.ageChange.bind(this);}ageChange(){this.setState({age:this.state.age+1})}render(){return <div><span>我今年{this.state.age}岁了</span><button onClick={()=>{this.ageChange()}}>过年了</button></div>}}

2. 组件props

组件state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。state是组件内部自己定义的,而props是父组件调用时提供的

function HelloMessage(props) {return <h1>Hello {props.name}!</h1>;
}const element = <HelloMessage name="Runoob"/>;

通过Class创建的组件,使用this调用props,而在使用之前,需要在类构造函数内,使用super(props)注入

class HelloMessage extends React.Component {constructor(props){super(props)}render() {return <h1>Hello {this.props.name}!</h1>;}
}

3. 条件渲染

3.1 基本概述

在 React 中,可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分。也可以在React 中的使用 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。

	const NavTitle=(props)=>{if(props.type===1){return <h1>{props.title}</h1>}else if(props.type===2){return <h2>{props.title}</h2>}}

3.2 三目运算

const NavTitle=(props)=>{return props.type===1?<h1>{props.title}</h1>: <h2>{props.title}</h2>}

4. 列表

react中,可以通过数组生成一系列标准结构组件,通过map方法完成列表渲染

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((numbers) =><li>{numbers}</li>
);

生成原理其实是使listItems成为一个数组容器,容器内部则是<li>{numbers}</li>组件,最后react内部可直接展开数组渲染
如果直接将numbers最为组件,则会展开成为内容被渲染
react在列表渲染的时候需要给组件指定一个key作为组件的唯一标识,该属性不会作为组件的props被接收,仅供react内部计算使用
Key 可以在 DOM 中的某些元素被增加或删除的时候帮助 React 识别哪些元素发生了变化。

5. Refs

5.1 概述

React 支持一种非常特殊的属性 Ref ,你可以用来绑定到render() 输出的标签上。
这个特殊的属性允许你引用相应的实例。

<input ref="myInput" />
var input = this.refs.myInput;

5.2 引用传递 Forwarding Refs

如果需要给组件绑定ref则上面的方式不支持,react提供了forwardRef方法来支持组件的引用,引用测方式是用过forwardRef函数传递ref的引用

const InpuDom= forwardRef((props, ref) => (<input type="text" ref={ref} />
));
class ForwardRef extends Component {constructor(props) {super(props);this.ref = createRef();}componentDidMount() {const { current } = this.ref;current.focus();}render() {return (<div><p>forward ref</p><InpuDom ref={this.ref} /></div>);}
}

6. 组件生命周期

组件生命周期的方法有:

  • componentWillMount --在渲染前调用
  • componentDidMount --在第一次渲染后调用
  • componentWillReceiveProps --在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
  • shouldComponentUpdate --返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。(可以在你确认不需要更新组件时使用。)
  • **componentWillUpdate ** --在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
  • componentDidUpdate --在组件完成更新后立即调用。在初始化时不会被调用。
  • **componentWillUnmount ** --在组件从 DOM 中移除之前立刻被调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka学习笔记--Topic 数据的存储机制

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

如何学习英语

前言 首先写一些自己的感言吧&#xff0c;其实从大学的时候就在不断地听英语&#xff0c;学英语&#xff0c;但是到毕业十几年后&#xff0c;英语一直没起到什么作用&#xff0c;当然最有作用的时候就是几次英语面试吧。 工作之后有一段学习英语的经历&#xff0c;当时花费了…

docker小白第五天

docker小白第五天 docker的私有库 有些涉密的信息代码不能放在阿里云的镜像仓库&#xff0c;因此需要构建一个个人内网专属的私有库&#xff0c;将镜像或者容器代码进行推送保存。 下载镜像docker registry 执行代码docker pull registry&#xff0c;用于搭建私服前的准备。…

Linux系统log日志简单清理

系统空间告急 清理log日志 找出当前目录中文件最大的10个文件&#xff1a; cd /var/log du -s ./* | sort -nr | head 系统日志log文件&#xff1a; ll -h /var/log/journal 只保留100MB的日志 journalctl --vacuum-size100M 系统暴力爆破SSH日志&#xff1a; ll -h /var/lo…

HTML中RGB颜色表示法和RGBA颜色表示法

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中RGB颜色表示法和RGBA颜色表示法以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以…

初级数据结构(六)——堆

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;五&#xff09;——树和二叉树的概念 | NULL 下一篇-> 1、堆的特性 1.1、定义 堆结构属于完全二叉树的范畴&#xff0c;除了满足完全二叉树的限制之外&#xff0c;还满…

SolidWorks二次开发 C#-读取基于Excel的BOM表信息

SolidWorks二次开发 C#-读取基于Excel的BOM表信息 问题点来源解决方案及思路相关引用链接 问题点来源 这是一位粉丝问的一个问题&#xff0c;他说到: 老师&#xff0c;请问Solidworks二次开发工程图中"基于Excel的材料明细表"怎么读取里面的数据&#xff1f; Ps:这…

leetcode刷题日志-383赎金信

思路&#xff1a;分别用两个map记录ransomNote和magazine中的字符以及出现的次数。最后遍历记录ransomNote的map&#xff0c;如果ransomNote的map中出现的magazine的map中没有出现或者出现的次数小于ransomNote的map则返回false&#xff0c;否则返回true&#xff1b; class So…

设计一个算法用于判断循环双链表是否对称。

题目描述&#xff1a;设计一个算法用于判断循环双链表是否对称。 分析&#xff1a; 分为两个情况&#xff0c;奇和偶&#xff0c;为奇&#xff08;qp&#xff09;时用q!p作为结束条件&#xff0c;为偶(p->nextq&&q->priorp)时用 q->next ! p 作为结束条件&am…

arcgis api for js 图层标注文本不显示

在打包arcgis api for js 项目后&#xff0c;更新到现场所有地图文本要素不显示的时候。 可能就是环境设置问题了&#xff0c;需要配置iis或者ngixs里边配置如下类型 iis发布的项目 1、打开iis中发布的网站 2、找到网站的MIME类型如下图 3、添加一下类型&#xff08;一个都不…

机器学习项目精选 第一期:超完整数据科学资料合集

大噶吼&#xff0c;不说废话&#xff0c;分享一波我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、超完整数据科学资料合集 地址&#xff1a;https://github.com/krishnaik06/The-Grand-Complete-Data-Science-Materials Pytho…

安全CDN有什么作用,安全CDN工作原理是什么?

一、CDN的应用场景 CDN技术可以应用于各种类型的网站和应用程序&#xff0c;特别是对于以下几种场景&#xff0c;CDN的作用尤为明显&#xff1a; 1. 高流量网站&#xff1a;对于流量较大的网站&#xff0c;CDN可以将网站的内容分发到全球各地的节点上&#xff0c;从而分担服务…

【Linux API 揭秘】container_of函数详解

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

1852_bash中的find应用扩展

Grey 全部学习内容汇总&#xff1a; https://github.com/GreyZhang/toolbox 1852_bash中的find应用扩展 find这个工具我用了好多年了&#xff0c;但是是不是真的会用呢&#xff1f;其实不然&#xff0c;否则也不会出现这种总结式的笔记。其实&#xff0c;注意部分小细节之后…

liunx之Samba服务器

环境&#xff1a;虚拟机CENTOS 7和 测试机相通 一、Samba服务器_光盘共享&#xff08;匿名访问&#xff09; 1.在虚拟机CENTOS 7安装smb服务&#xff0c;并在防火墙上允许samba流量通过 2. 挂载光盘 3.修改smb.conf配置文件&#xff0c;实现光盘匿名共享 4. 启动smb服务 5.在…

GB/T 19536-2015 集装箱底板用胶合板检测

集装箱底板用胶合板是指由木质单板或竹质单元与木质单板复合而成的&#xff0c;具有防虫、防腐及耐候性能&#xff0c;用于一般货物集装箱底板的胶合板。 GB/T 19536-2015集装箱底板用胶合板测试&#xff1a; 测试项目 测试方法 含水率 GB/T 17657 密度 GB/T 17657 静曲…

编写自定义函数找出二维数组(3*4)中元素的最大值与最小值,并返回其最大值与最小值,并在main函数中测试结果

编写自定义函数找出二维数组&#xff08;3*4&#xff09;中元素的最大值与最小值&#xff0c;并返回其最大值与最小值&#xff0c;并在main函数中测试结果。要求&#xff1a; 数组在main函数中使用随机函数获得赋值&#xff1b;自定义函数返回类型为void&#xff1b;输出结果在…

手麻、腿麻、麻痛…背后竟隐藏7大疾病!多一个人知道,少一个悲剧!

手脚麻木背后的7大病症&#xff1a;骨病、脑梗、肿瘤…… 1、神经问题 上图四只手上橙色的区域代表了麻木感&#xff0c;如果您的手麻集中在无名指和小指的区域&#xff0c;您可以拿一张纸&#xff0c;用五个手指分别试着夹住&#xff0c;检验您的五个手指力量&#xff1b;您还…

(5)shell命令以及Linux的权限

写在前面 本章我们将重点讲解 Linux 权限&#xff0c;这是 Linux 基础部分中非常重要的一部分。内容比较干&#xff0c;我会稍稍正经些去讲解。话不多说&#xff0c;我们直接切入正题。 shell 命令及运行原理 严格意义上说的是一个操作系统&#xff0c;我们称之为 —— &…

Logstash访问安全访问Elasticsearch集群

生成logstash证书: opensal pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys > logafash.cer openssl x509 -in logstash.cer -out logstash.pem 编排配置文件