React进阶 - 11( 说一说 PropTypes 和 DefaultProps )

本章内容

目录

    • PropTypes
    • DefaultProps

截止到上一节的内容,我们使用了一个 TodoList的案例,大概了解了 React的一些入门知识。从本节内容开始,我们将进入React进阶知识的学习

PropTypes

  • 在组件拆分时,我们知道每个组件都有自己的 props,这个参数是从父组件那里接收的一些数据。

  • 那么有个疑问,子组件在接受参数的时候,怎么对这些参数”类型“做校验呢,又如何定义参数的”默认值“呢?

  • 打开之前工程里的 TodoItem.js组件,可以看到其父组件传过来的参数都有属于自己的”类型“
    在这里插入图片描述

  • React可以使用 PropTypes对传递的属性进行”类型“强校验

import React, { Component } from 'react'
import PropTypes from 'prop-types' // 1、引入 PropTypesclass TodoItem extends Component {constructor(props) {super(props)this.handleClick = this.handleClick.bind(this)}render () {const { content } = this.propsreturn (<div onClick={this.handleClick}>{content}</div>)}handleClick() {const { deleteFn, index } = this.propsdeleteFn(index)}
}// 2、使用 PropTypes 对属性进行强校验
TodoItem.propTypes = {content: PropTypes.string,index: PropTypes.number,deleteFn: PropTypes.func
}export default TodoItem
  • 运行代码后,发现正常运行,没有报错。
    在这里插入图片描述

  • 注意的是,如果你在子组件将 index的类型设置为 string, 界面将会出现一个”警告“,因为父组件那边传递的类型是 number类型,跟设定的不符
    在这里插入图片描述

import React, { Component } from 'react'
import PropTypes from 'prop-types' // 1、引入 PropTypesclass TodoItem extends Component {constructor(props) {super(props)this.handleClick = this.handleClick.bind(this)}render () {const { content } = this.propsreturn (<div onClick={this.handleClick}>{content}</div>)}handleClick() {const { deleteFn, index } = this.propsdeleteFn(index)}
}// 2、使用 PropTypes 对属性进行强校验
TodoItem.propTypes = {content: PropTypes.string,index: PropTypes.string, // 如果这里设置为 string,那么界面会出现警告deleteFn: PropTypes.func
}export default TodoItem

DefaultProps

  • 接着上面的代码,现在有个新需求: 假设在子组件中,子组件必须要求父组件给它传递一个”属性“(例如:title), 但是父组件由于某些原因,不能传递这个属性,此时应该怎么解决呢?
import React, { Component } from 'react'
import PropTypes from 'prop-types' class TodoItem extends Component {constructor(props) {super(props)this.handleClick = this.handleClick.bind(this)}render () {// 1、子组件要求父组件给它传递一个 title 属性const { content, title } = this.propsreturn (<div onClick={this.handleClick}>{/* 2、并且将 title 属性显示在界面上 */}{title}---{content}</div>)}handleClick() {const { deleteFn, index } = this.propsdeleteFn(index)}
}TodoItem.propTypes = {title: PropTypes.string.isRequired, // 3、要求父组件必须传递一个 title 属性content: PropTypes.string,index: PropTypes.number,deleteFn: PropTypes.func
}export default TodoItem
  • 运行一下界面,发现控制台出现了一个警告(因为父组件确实没有传递这个 title属性,但是子组件他又必须要)。
    在这里插入图片描述

  • 要解决上面的警告,那使用 defaultPropstitle属性设置一个”默认值“

import React, { Component } from 'react'
import PropTypes from 'prop-types' class TodoItem extends Component {constructor(props) {super(props)this.handleClick = this.handleClick.bind(this)}render () {const { content, title } = this.propsreturn (<div onClick={this.handleClick}>{title}---{content}</div>)}handleClick() {const { deleteFn, index } = this.propsdeleteFn(index)}
}TodoItem.propTypes = {title: PropTypes.string.isRequired,content: PropTypes.string,index: PropTypes.number,deleteFn: PropTypes.func
}TodoItem.defaultProps = {title: '我是子组件' // 给 title 设置一个”默认值“
}export default TodoItem
  • 设置完”默认值“后,再次运行界面,发现一切正常
    在这里插入图片描述

到此,本章内容结束!

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

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

相关文章

AI快速构建中文文本蕴含深度学习模型-NeuronBlocks(一)

案例介绍 随着自然语言处理(NLP)领域研究的不断深入&#xff0c;如何让机器能够真正地理解自然语言&#xff0c;而不是仅简单地处理语句的表层信息&#xff0c;渐渐成为了许多学者面临的问题。实现对文本深层次理解&#xff0c;是自然语言处理研究最主要也是最重要的目的之一。…

2017-2021年中国城市数字经济指数

2017-2021年中国城市数字经济指数 1、时间&#xff1a;2017-2021年 2、指标&#xff1a;年份、城市名称、城市代码、城市分级、发展阶段、总得分、总排名、总排名变更、数据及信息化基础设施得分、数据及信息化基础设施排名、数据及信息化基础设施排名变更、城市服务得分、城…

c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)

文章目录 1.把字符串转换成整数题目详情代码思路 2. 344.反转字符串题目详情代码1思路1代码2思路 3. 387. 字符串中的第一个唯一字符题目详情代码思路 4. 917. 仅仅反转字母题目详情代码思路 1.把字符串转换成整数 传送门 题目详情 代码 class Solution { public:int StrToI…

详解SpringCloud微服务技术栈:一文速通RabbitMQ,入门到实践

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;DockerCompose部署微服务集群 &#x1f4da;订阅专栏&#xff1a;微服务技术全家桶 希…

ELK分离式日志(2)

目录 一.FilebeatELK 部署 开台服务器&#xff08;192.168.233.50&#xff09;下载fliebeat&#xff1a; 安装nginx后查看下日志文件&#xff1a; 设置 filebeat 的主配置文件: 关闭logstash&#xff0c;检测文件&#xff1a; 在50节点上启动filebeat&#xff1a; 访问页…

SpikingJelly笔记之IFLIF神经元

文章目录 前言一、脉冲神经元二、IF神经元1、神经元模型2、神经元仿真 三、LIF神经元1、神经元模型2、神经元仿真 总结 前言 记录整合发放(integrate-and-fire, IF)神经元与漏电整合发放(leaky integrate-and-fire, LIF)神经元模型&#xff0c;以及在SpikingJelly中的实现方法…

x-cmd pkg | yq - 命令行 YAML处理工具

目录 简介首次用户支持格式转换友好的显示和操作语法与 jq 类似竞品和相关作品进一步阅读 简介 yq (YAML Query) 是一个轻量级的 YAML、JSON、XML 处理器&#xff0c;主要用于查询和提取 YAML 数据。 本 yq 的包来自 mikefarah/yq 项目&#xff0c;语法类似于 jq 。相比 kisly…

java数据结构与算法刷题-----LeetCode645. 错误的集合(位运算解法需要重点掌握)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 法一&#xff1a;桶排序思想法二&#xff1a;位运算 法一&#x…

Python文件操作和异常处理:高效处理数据的利器

文章目录 一、引言1.1 文件操作和异常处理对于编程的重要性1.2 Python作为实现文件操作和异常处理的强大工具 二、为什么学习文件操作和异常处理2.1 处理各种文件格式&#xff1a;从文本到图像到音频等2.2 确保代码的鲁棒性&#xff1a;有效处理异常情况 三、文件读取和写入3.1…

什么是关键字?C语言的关键字有哪些?(C语言32个关键字详解)

目录 一、问题 二、解答 1、数据类型关键字&#xff08;12个&#xff09; (1) 声明和定义的区别 (2) 数据类型关键字 • char&#xff1a;声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集&#xff08;如UTF-8&#xff…

【C++】初识类和对象

引言 在C语言中&#xff0c;我们用结构体来描述一个复杂的对象&#xff0c;这个对象可能包括许多的成员&#xff0c;如用结构体描述一个学生的成绩&#xff0c;或者描述一个日期等。 struct Date {int _year;int _month;int _day; }; 如上是一个描述日期的结构体定义&#x…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构&#xff08;Hyper-converged infrastructure&#xff0c;缩写为HCI&#xff09;&#xff0c;是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中&#xff0c;同一厂商的服务器与存储等硬件单元&#xff0c;搭配…

【网站项目】基于SSM的263货物进销管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

探索Docker-Compose:从基础到高级命令全解析

探索Docker-Compose&#xff1a;从基础到高级命令全解析 引言Docker-Compose基础1. Docker-Compose简介2. 安装Docker-Compose3. 编写第一个Compose文件4. 基本命令 Docker-Compose文件结构解析1. 理解docker-compose.yml2. 基本组件3. 文件示例4. 配置项解析 常用Docker-Compo…

洛谷P1319 压缩技术(C语言)

这样一道入门题目&#xff0c;本来可以用for循环直接操作&#xff0c;但作者异想天开(xian de dan teng)地把所有数据登记在一个数组里面&#xff0c;然后再统一按格式输出。也就是定义一个数组Map&#xff0c;大小为n成n&#xff0c;然后按照输入数据&#xff0c;把Map中每一个…

【50.2K⭐】Tabby:一款强大、灵活且跨平台的免费终端应用程序

【50.2K⭐】Tabby&#xff1a;一款强大、灵活且跨平台的免费终端应用程序 在快节奏的现代生活中&#xff0c;我们总是在寻找提高工作效率的方法。如果你是一位开发人员&#xff0c;或者是一个对技术充满好奇心的电脑爱好者&#xff0c;我们经常需要在 Windows 上进行远程操作与…

加密机授权报错如何排查?进入加密机后台的方式介绍

我们在此前的文章中介绍过不少TSINGSEE青犀视频安防监控视频平台关于加密机授权操作及相关疑问解答&#xff0c;感兴趣的用户可以翻阅往期的文章进行了解。由于新用户咨询该方面的问题较多&#xff0c;今天我们再来介绍一下用户在使用过程中遇到的问题。 1、如何进入加密机后台…

Vue-33、Vue中为什么使用render函数

1、main.js //该文件是整个项目的入口文件 //引入Vue import Vue from vue //引入APP组件&#xff0c;他是所有组件的父组件 import App from ./App.vue //关闭Vue是生产提示 Vue.config.productionTip false; //创建Vue实例对象---vm new Vue({render: h > h(App), }).$m…

笔试面试题——二叉树进阶(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、二叉搜索树与双向链表1、题目讲解2、思路讲解递归展开图3、代码实现 二、从前序遍历和中序…

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令&#xff1a; docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…