React---组件实例三大核心属性(二)props

2021年09月15日 阅读数:1
这篇文章主要向大家介绍React---组件实例三大核心属性(二)props,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、 理解

  1. 每一个组件对象都会有props(properties的简写)属性
  2. 组件标签的全部属性都保存在props
  3. 经过标签属性从组件外向组件内传递变化的数据

2、做用

  1. 注意: 组件内部不要修改props数据
  2. 内部读取某个属性值

3、编码操做

  1. 内部读取某个属性值

    this.props.namejavascript

    2. 对props中的属性值进行类型限制必要性限制java

    第一种方式(React v15.5 开始已弃用):数组

Person.propTypes = {
 name: React.PropTypes.string.isRequired,
 age: React.PropTypes.number
}

    第二种方式(新):使用prop-types库进限制(须要引入prop-types库)babel

Person.propTypes = {
  name: PropTypes.string.isRequired,
  age: PropTypes.number
}

  3. 扩展属性: 将对象的全部属性经过props传递函数

    <Person {...person}/>ui

  4. 默认属性值this

Person.defaultProps = {
  age: 18,
  sex:'男'
}

  5. 组件类的构造函数编码

constructor(props){
  super(props)
  console.log(props)//打印全部属性
}

 

3、案例

  1. 类式组件使用propsspa

<script type="text/babel">
        //建立组件
        class Person extends React.Component{

            constructor(props){
                //构造器是否接收props,是否传递给super,取决于:是否但愿在构造器中经过this访问props
                // console.log(props);
                super(props)
                console.log('constructor',this.props);
            }

            //对标签属性进行类型、必要性的限制
            static propTypes = {
                name:PropTypes.string.isRequired, //限制name必传,且为字符串
                sex:PropTypes.string,//限制sex为字符串
                age:PropTypes.number,//限制age为数值
            }

            //指定默认标签属性值
            static defaultProps = {
                sex:'男',//sex默认值为男
                age:18 //age默认值为18
            }
            
            render(){
                // console.log(this);
                const {name,age,sex} = this.props
                //props是只读的
                //this.props.name = 'jack' //此行代码会报错,由于props是只读的
                return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{sex}</li>
                        <li>年龄:{age+1}</li>
                    </ul>
                )
            }
        }

        //渲染组件到页面
        ReactDOM.render(<Person name="jerry"/>,document.getElementById('test1'))
    </script>

  2. 函数组件使用props.net

<script type="text/babel">
        //建立组件
        function Person (props){
            const {name,age,sex} = props
            return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{sex}</li>
                        <li>年龄:{age}</li>
                    </ul>
                )
        }
        Person.propTypes = {
            name:PropTypes.string.isRequired, //限制name必传,且为字符串
            sex:PropTypes.string,//限制sex为字符串
            age:PropTypes.number,//限制age为数值
        }

        //指定默认标签属性值
        Person.defaultProps = {
            sex:'男',//sex默认值为男
            age:18 //age默认值为18
        }
        //渲染组件到页面
        ReactDOM.render(<Person name="jerry"/>,document.getElementById('test1'))
    </script>

 4、展开运算符

 1 <script type="text/javascript" >
 2             let arr1 = [1,3,5,7,9]
 3             let arr2 = [2,4,6,8,10]
 4             console.log(...arr1); //展开一个数组
 5             let arr3 = [...arr1,...arr2]//链接数组
 6             
 7             //在函数中使用,参数个数不肯定
 8             function sum(...numbers){
 9                 return numbers.reduce((preValue,currentValue)=>{
10                     return preValue + currentValue
11                 })
12             }
13             console.log(sum(1,2,3,4));
14 
15             //构造字面量对象时使用展开语法
16             let person = {name:'tom',age:18}
17             let person2 = {...person}
18             //console.log(...person); //报错,展开运算符不能展开对象
19             person.name = 'jerry'
20             console.log(person2);
21             console.log(person);
22 
23             //合并
24             let person3 = {...person,name:'jack',address:"地球"}
25             console.log(person3);
26             
27         </script>

 

 

 

 

 

本文同步分享在 博客“半指温柔乐”(CNBlog)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。