React从入门到实战 -组件的三大核心属性(2)props

news/2024/7/15 17:03:11 标签: react.js, javascript, 前端

文章目录

        • 基本使用
        • 对props进行限制
        • 类式组件中的构造器

基本使用

    // 定义组件
    class MyComponent extends React.Component{
        render(){
            return (<ul>
                    <li>姓名:{this.props.name}</li>
                    <li>年龄:{this.props.age}</li>
                    <li>性别:{this.props.sex}</li>
                </ul>)
        }
    }
    // 渲染组件
    ReactDOM.render(<MyComponent name='tom' sex='女' age='24'></MyComponent>,document.getElementById("test"))

当组件内部的属性是动态生成的时候,就不能使用state,而是要使用Props。与html标签类似,我们把对应的键值对放在标签上,react会自动替我们进行收集,将收集到的属性放在props里,如下图所示。注意:props是只读的,组件内部不要修改props数据

image-20230618134045138

简化代码

这种直接把属性值一个个传递过去的方法,适用于属性比较少的时候,当属性比较多的时候,我们可以使用...(展开运算符)来简化代码

    // 定义组件
    class MyComponent extends React.Component{
        render(){
        console.log(this)
            return (<ul>
                    <li>姓名:{this.props.name}</li>
                    <li>年龄:{this.props.age}</li>
                    <li>性别:{this.props.sex}</li>
                </ul>)
        }
    }
    // 批量传递
    let p = {name:'张三',age:24,sex:"男"}
    ReactDOM.render(<MyComponent {...p}></MyComponent>,document.getElementById("test"))

拓展——展开运算符

  1. 展开数组
let arr1 = [1,2,3,4]
let arr2 = [5,6,7]
console.log(...arr1)  // 1,2,3,4
  1. 连接数组
let arr3 = [...arr1,...arr2]
console.log(arr3) // [1,2,3,4,5,6,7]
  1. 函数传参,当函数参数个数不确定的时候
function sum(...numbers){
 return numbers.reduce((preValue,currentValue)=>{
 return preValue + currentValue
 })
} // 10
  1. 展开运算符不能够展开一个对象,构造字面量对象可以使用展开语法

对props进行限制

  1. 引入prop-types.js用于对组件标签属性进行限制
  2. 在创建组件时,组件有添加propTypes则对标签属性进行类型,必要性的限制
//   创建组件
class MyComponent extends React.Component{
    render(){
    //    注意props是只读
        const {name,age,sex } = this.props
       
        return (
            <ul>
                <li>姓名:{name}</li>
                <li>年龄:{age}</li>
                <li>性别:{sex}</li>
                </ul>
        )
    }
}
// 对标签属性进行类型,必要性的限制
MyComponent.propTypes={
    name:PropTypes.string.isRequired,
    sex:PropTypes.string,
    age:PropTypes.number
}

let prop = {name:'张三',age:"18",sex:"男"}
ReactDOM.render(<MyComponent {...prop}/>,document.getElementById("test"))

image-20230618172242423

  1. 使用defaultProps对组件属性添加默认值
// 指定默认标签属性值
MyComponent.defaultProps = {
    sex:"女",
    age:18
}
  1. 优化代码——将defaultProps和propTypes放到类里面
    //   创建组件
class MyComponent extends React.Component{
    // 对标签属性进行类型,必要性的限制
    static propTypes={
        name:PropTypes.string.isRequired,
        sex:PropTypes.string,
        age:PropTypes.number
    }
    // 指定默认标签属性值
    static defaultProps = {
        sex:"女",
        age:18
    }
    render(){
    //    注意props是只读
        const {name,age,sex } = this.props
       
        return (
            <ul>
                <li>姓名:{name}</li>
                <li>年龄:{age}</li>
                <li>性别:{sex}</li>
                </ul>
        )
    }
}

类式组件中的构造器

在React组件挂载之前,会调用它的构造函数,在为React.Component子类实现构造函数时,应在其他语句之前调用super(props),否则,this.props在构造函数中可能会出现未定义的Bug

通常,在React中,构造函数仅用于以下两种情况:

  • 通过this.state赋值对象来初始化内部state
  • 为事件处理函数绑定实例

构造器是否接收props,是否传递给super,取决于是否希望在构造器中通过this访问props

总之,类式组件的构造器能省略则省略。


http://www.niftyadmin.cn/n/463342.html

相关文章

云原生入门指南:构建未来的弹性、高效和可靠应用

本文目录 第一部分&#xff1a;云原生概述第二部分&#xff1a;云原生技术栈第三部分&#xff1a;云原生应用开发实践云原生初体验结语&#xff1a; 第一部分&#xff1a;云原生概述 什么是云原生&#xff1f; 云原生的定义&#xff1a;云原生是一种构建和运行在云端的应用开发…

人工智能数据集处理——数据清理1

目录 一、概述 二、缺失值 1、检测缺失值 使用isna() 方法检测na_df中是否存在缺失值 使用natna() 方法 2、缺失值的处理 (1) 删除缺失值 使用删除dropna() 方法删除na_df 对象中缺失值所在的一行数据 删除全为缺失值的行 删除有缺失值的行 (2) 填充缺失值 使用fill…

C语言数组指针和指针数组

文章目录 1 数组指针和指针数组的区别2 数组首地址和数组首元素地址的区别参考 1 数组指针和指针数组的区别 对指针数组和数组指针的概念&#xff0c;相信很多C程序员都会混淆。下面通过两个简单的语句来分析一下二者之间的区别&#xff0c;示例代码如下所示&#xff1a; int…

git 的基本操作

1. git建立本地仓库 在想要建立的目录下输入命令 git init 我们可以看一下 .git目录下有什么 2. 配置git本地仓库 配置用户的 name 和 email 命令&#xff1a;git config [...] 配置完后&#xff0c;我们像查看一下 刚才的配置 2.1 查看配置命令 git config -l 2.2 删除…

基于java+swing+mysql飞机票预订系统

基于javaswingmysql飞机票预订系统 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库表4.注册窗口5.登录窗口6、用户-主窗口7、用户-查询航班8.用户--订票8.用户--取票9.管理员-所有航班信息10.管理员-添加航班11.用户信息12.订票状态 四、其它1.其他系统实现五.获取源码…

C++——详解类模板与友元函数

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 类模板与友元函数1️⃣非模板友元函数2️⃣约束模板友元函数3️⃣非约束模板友元函数 类模板与友元函数 模板类的友元函数有三类&#xff1a; …

Python潮流周刊#8:Python 3.13 计划将解释器提速 50%!

你好&#xff0c;我是猫哥。这里每周分享优质的 Python 及通用技术内容&#xff0c;部分为英文&#xff0c;已在小标题注明。&#xff08;标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。&#xff09; 首发于我的博客&#xff1a;https://py…

一、约束编程简介(Constraints Programming)

文章目录 1、约束编程求解器2、值域传播器THE END 1、约束编程求解器 \qquad 约束编程是一种编程范式&#xff0c;旨在解决那些需要满足一系列约束条件的问题。在约束编程中&#xff0c;问题被定义为一组变量和约束条件&#xff0c;而不是指定解决问题的算法步骤。通过定义变量…