React-05React中props属性(传递数据),propTypes校验,类式与函数式组件props的使用

1.类式组件props基本数据读取与解构运算符传递

 <script type="text/babel">//  创建组件class PersonalInfo extends React.Component {render() {// 读取props属性 并读取值console.log('props',this.props);return(<ul><li>姓名:{this.props.name}</li><li>性别:{this.props.gender}</li><li>年龄:{this.props.age}</li></ul>) }}// 渲染组件const p ={name:'岂不闻',gender:'男',age:'24'}// 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))</script>

2.类式组件propTypes校验props传递数据规则

propTypes是react提供的一种工具,对于组件的props进行类型检查

 2.1 html引入prop-types.js
 <!--  {/* // 引入 PropTypes */} --><script src="https://unpkg.com/prop-types@15.6.2/prop-types.js"></script>
2.2 react脚手架引入
npm install prop-types
2.3 propTypes验证器声明类型

基本数据类型

PropTypes.string:字符串
PropTypes.number:数字
PropTypes.boolean:布尔值
PropTypes.object:对象
PropTypes.array:数组
PropTypes.func:函数
PropTypes.symbol:Symbol

特殊类型

PropTypes.node:任何可以被渲染的内容:数字、字符串、元素或数组(包括这些类型)
PropTypes.element:React元素
PropTypes.instanceOf(Class):某个类的实例

组合类型

PropTypes.oneOf(['option1', 'option2']):枚举类型,值必须是所提供选项之一
PropTypes.oneOfType([PropTypes.string, PropTypes.number]):多个类型中的一个
PropTypes.arrayOf(PropTypes.number):某种类型组成的数组
PropTypes.objectOf(PropTypes.number):某种类型组成的对象
PropTypes.shape({ key: PropTypes.string, value: PropTypes.number }):具有特定形状的对象
2.4具体代码例子

 指定标签默认属性

        // 指定标签默认属性PersonalInfo.defaultProps = {name: '未知',gender: '未知',age: 0}

 props传递限制传递数据规则

 PersonalInfo.propTypes = {// 限定为字符串类型 必填项name: PropTypes.string.isRequired,gender: PropTypes.string.isRequired,age: PropTypes.number.isRequired}

扩展运算符批量传入

        // 渲染组件const p ={name:'岂不闻',gender:'男',age:'24'}// 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))

 整体代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Hello,React</title>
</head><body><!-- 容器 --><div id="test1"></div><!-- 容器 --><div id="test2"></div><!-- {/* // 引入 React核心库 */} --><script src="https://unpkg.com/react@16/umd/react.production.min.js"></script><!-- {/* // 引入 react-dom 用于支持 react 操作 DOM */} --><script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script><!-- {/* // 引入 babel:1. ES6 ==> ES5 2. jsx ==> js */} --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script><!--  {/* // 引入 PropTypes */} --><script src="https://unpkg.com/prop-types@15.6.2/prop-types.js"></script><script type="text/babel">//  创建组件class PersonalInfo extends React.Component {render() {// 读取props属性 并读取值console.log('props',this.props);const {name,gender,age} = this.props;return(<ul><li>姓名:{name}</li><li>性别:{gender}</li><li>年龄:{age}</li></ul>) }}// 指定标签默认属性PersonalInfo.defaultProps = {name: '未知',gender: '未知',age: 0}// props传递限制传递数据规则PersonalInfo.propTypes = {// 限定为字符串类型 必填项name: PropTypes.string.isRequired,gender: PropTypes.string.isRequired,age: PropTypes.number.isRequired}// 渲染组件const p ={name:'岂不闻',gender:'男',age:'24'}// 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))</script>
</body></html>

3.类式组件props的简写方式 (static 关键字)

 <script type="text/babel">// 创建组件class PersonalInfo extends React.Component {// 指定标签默认属性static defaultProps = {name: '未知',gender: '未知',age: 0}// props传递限制传递数据规则static propTypes = {// 限定为字符串类型 必填项name: PropTypes.string.isRequired,gender: PropTypes.string.isRequired,age: PropTypes.number.isRequired}render() {// 读取props属性 并读取值console.log('props',this.props);const {name,gender,age} = this.props;return(<ul><li>姓名:{name}</li><li>性别:{gender}</li><li>年龄:{age}</li></ul>) }}// 渲染组件const p ={name:'岂不闻',gender:'男',age:'24'}// 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))</script>

 4.函数式组件props的使用

 <script type="text/babel">// 指定标签默认属性PersonalInfo.defaultProps = {name: '未知',gender: '未知',age: 0}//  props传递限制传递数据规则PersonalInfo.propTypes = {// 限定为字符串类型 必填项name: PropTypes.string.isRequired,gender: PropTypes.string.isRequired,age: PropTypes.number.isRequired}// 函数式组件function PersonalInfo(props){// 解构赋值const {name,gender,age} = props;return(<ul><li>姓名:{name}</li><li>性别:{gender}</li><li>年龄:{age}</li></ul>) }// 组件渲染ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))</script>

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

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

相关文章

PCI认证 密钥注入 ECC算法工具 NID_secp521r1 国密算法 openssl 全套证书生成,从证书提取公私钥数组 x,y等

步骤 1.全套证书已经生成。OK 2.找国芯要ECC加密解密签名验签代码。给的逻辑说明没有示例代码很难的上。 3.集成到工具 与SP联调。 1.用openssl全套证书生成及验证 注意&#xff1a;这里CA 签发 KLD 证书用的是SHA256。因为芯片只支持SHA256算法,不支持SHA512。改成统一。…

蓝桥杯每日刷题c++

目录 P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn) P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn) P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn) P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn) P8754 [蓝桥杯 2021 省 AB2…

oracle 数据库字段类型为NUMBER(5,2)时,并且数据库值为0.1,为什么Java执行SQL查出来时为“.1“?

在 Oracle 数据库中&#xff0c;当字段类型为 NUMBER(5,2) 且存储的值为 0.1 时&#xff0c;Java 程序查询结果可能显示为 ".1"&#xff08;省略前导零&#xff09;&#xff0c;这是由 Oracle JDBC 驱动默认的数字格式化行为 导致的。以下是原因分析和解决方案&#…

3月AI论文精选十篇

1. Feature-Level Insights into Artificial Text Detection with Sparse Autoencoders[1] 核心贡献&#xff1a;通过稀疏自编码器揭示AI生成文本的检测特征&#xff0c;提出基于特征分布的鉴别方法。研究发现&#xff0c;AI文本在稀疏编码空间中呈现独特的"高频低幅"…

STM32在裸机(无RTOS)环境下,需要手动实现队列机制来替代FreeRTOS的CAN发送接收函数

xQueueSendToBackFromISR(ecuCanRxQueue, hcan->pRxMsg, &xHigherPriorityTaskWoken)&#xff0c;xQueueReceive(mscCanRxQueue,&mscRxMsg,0)和xQueueSendToBack(mscCanTxQueue, &TxMessageTemp, 0 )这3个函数&#xff0c;在裸机下实现&#xff1a; 在裸机&…

使用PX4,gazebo,mavros为旋翼添加下视的相机(仿真采集openrealm数据集-第一步)

目录 一.方法一&#xff08;没成功&#xff09; 1.运行PX4 2.运行mavros通讯 3.启动仿真世界和无人机 &#xff08;1&#xff09;单独测试相机 &#xff08;2&#xff09;make px4_sitl gazebo启动四旋翼iris无人机 二.方法二&#xff08;成功&#xff09; 1.通过 rosl…

7、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)

续前一篇文章。 3、nrfx_gpiote_in_event_enable void nrfx_gpiote_in_event_enable(nrfx_gpiote_pin_t pin, bool int_enable) {NRFX_ASSERT(nrf_gpio_pin_present_check(pin));NRFX_ASSERT(pin_in_use_by_gpiote(pin));if (pin_in_use_by_port(pin)){nrf_gpiote_polarity_t…

Java 实现插入排序:[通俗易懂的排序算法系列之三]

引言 大家好!欢迎继续关注我的排序算法系列。今天,我们要学习的是另一种非常基础且重要的排序算法——插入排序 (Insertion Sort)。 插入排序的思路非常贴近我们日常整理扑克牌的方式,理解起来相对自然。虽然它在最坏情况下的效率不高,但在某些特定场景下,它的表现甚至优…

Java的spring boot项目编译成功启动报错

问题现象&#xff1a;spring boot项目&#xff0c;候删除一些无用代码后&#xff0c;build成功&#xff0c;启动时报错&#xff1a;找不到java.util.Map或者其他对象&#xff08;用Lombok注解Data&#xff09;中的字段属性找不到等错误。解答&#xff1a; 常见是Lombok版本问题…

PyTorch参数管理详解:从访问到初始化与共享

本文通过实例代码讲解如何在PyTorch中管理神经网络参数&#xff0c;包括参数访问、多种初始化方法、自定义初始化以及参数绑定技术。所有代码可直接运行&#xff0c;适合深度学习初学者进阶学习。 1. 定义网络与参数访问 1.1 定义单隐藏层多层感知机 import torch from torch…

基于springboot+vue的课程管理系统

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql8 | maven | node v16.20.2 | idea 二、代码及数据 三、功能介绍 01. 登录 02. 管理员-首页 03. 管理员-系管理 04. 管理员-专业管理 05. 管…

ssh密钥连接远程服务器并用scp传输文件

ssh密钥连接远程服务器 私钥的权限必须是600chmod 600 id_rsa连接时在命令中加上私钥的地址ssh -i PATH_to_id_rsa usernameip -p port scp -P port -i PATH_to_id_rsa file usernameip:PATH

ElasticSearch迁移数据

一、查询索引 1、查询所有索引 curl --user elastic:123456 -XGET "http://localhost:19200/_cat/indices?v&sindex" 2、查询索引配置 以索引名称hello为例 curl --user elastic:123456 -XGET "http://localhost:19200/hello/_settings?pretty" 3…

【Unity】animator检测某state动画播放完毕方法

博主对动画系统很不熟&#xff0c;可能使用的方法比较曲折&#xff0c;但是我确实没找到更有效的方法了。 unity的这个animator在我看来简直有毛病啊&#xff0c;为什么那么难以获取某状态动画的信息呢&#xff1f;&#xff1f;&#xff1f; 想要知道动画播完没有只有用norma…

Jmeter 插件【性能测试监控搭建】

1. 安装Plugins Manager 1.1 下载路径&#xff1a; Install :: JMeter-Plugins.org 1.2 放在lib/ext目录下 1.3 重启Jmeter&#xff0c;会在菜单-选项下多一个 Plugins Manager菜单&#xff0c;打开即可对插件进行安装、升级。 2. 客户端(Jmeter端) 2.1 安装plugins manager…

ollama+open-webui本地部署自己的模型到d盘+两种open-webui部署方式(详细步骤+大量贴图)

一、ollama准备 1.官网下载ollama&#xff1a;https://ollama.com/download 2.在 d 盘创建 ollama 文件夹&#xff0c;把软件包放进去 3.管理员身份运行黑窗口 win r 弹出运行窗口 输入 cmd 后&#xff0c; ctrl shift 回车&#xff0c;以管理员身份打开 3.切换到 d 盘&a…

(学习总结33)Linux Ext2 文件系统与软硬链接

Linux Ext2 文件系统与软硬链接 理解硬件磁盘、服务器、机柜、机房磁盘物理结构磁盘的逻辑结构实际过程 CHS 与 LBA 地址转换 引入文件系统引入 " 块 " 概念引入 " 分区 " 概念引入 " inode " 概念 ext2 文件系统宏观认识Block Group 块组与其内…

Go语言sync.Mutex包源码解读

互斥锁sync.Mutex是在并发程序中对共享资源进行访问控制的主要手段&#xff0c;对此Go语言提供了非常简单易用的机制。sync.Mutex为结构体类型&#xff0c;对外暴露Lock()、Unlock()、TryLock()三种方法&#xff0c;分别用于阻塞加锁、解锁、非阻塞加锁操作&#xff08;加锁失败…

SQL注入流量分析

免责声明&#xff1a;本文仅作分享 ~ 目录 SQL注入流量分析 特征&#xff1a; sqlmap注入类型 漏洞环境搭建 error_sql: bool_sql: time_sql: union_sql: Stacked Queries: Inline Queries: SQL注入流量分析 https://www.freebuf.com/column/161797.html SQLMAP攻击…

Linux 时间同步工具 Chrony 简介与使用

一、Chrony 是什么&#xff1f; chrony 是一个开源的网络时间同步工具&#xff0c;主要由两个组件组成&#xff1a; chronyd&#xff1a;后台服务进程&#xff0c;负责与时间服务器交互&#xff0c;同步系统时钟。chronyc&#xff1a;命令行工具&#xff0c;用于手动查看或修…