zoukankan      html  css  js  c++  java
  • 06 组件三大属性 ----- props

     需求: 自定义用来显示一个人员信息的组件, 效果如页面. 说明
          1). 如果性别没有指定, 默认为男
          2). 如果年龄没有指定, 默认为18
     
    第一步,定义组件标签并初始化显示组件标签
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <title>Document</title>
     7     <script src="../js/react.development.js"></script>
     8     <script src="../js/react-dom.development.js"></script>
     9     <script src="../js/babel.min.js"></script>
    10 </head>
    11 <body>
    12     <div id="test"></div>
    13 </body>
    14 </html>
    15 <script type="text/babel">
    16 
    17     function PersonComponent(props){
    18       return (
    19             <ul>
    20                 <li>姓名:{props.name}</li>
    21                 <li>年龄:{props.age}</li>
    22                 <li>性别:{props.sex}</li>
    23             </ul>
    24         )
    25     }
    26     const person={
    27         name:'张三',
    28         age:19,
    29         sex:'',
    30     }
    31     ReactDOM.render(<PersonComponent name={person.name} age={person.age} sex={person.sex}/>,document.getElementById("test"));
    32 </script>

    第二步,对属性赋默认值,需求中,年龄和性别不是一定要传的,如果没有传,就要指定默认值

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <title>Document</title>
     7     <script src="../js/react.development.js"></script>
     8     <script src="../js/react-dom.development.js"></script>
     9     <script src="../js/prop-types.js"></script>
    10     <script src="../js/babel.min.js"></script>
    11 </head>
    12 <body>
    13 <div id="test"></div> 14 15 </body> 16 </html> 17 <script type="text/babel"> 18 19 function PersonComponent(props){ 20 return ( 21 <ul> 22 <li>姓名:{props.name}</li> 23 <li>年龄:{props.age}</li> 24 <li>性别:{props.sex}</li> 25 </ul> 26 ) 27 } 28 //设置默认属性值 29 PersonComponent.defaultProps={ 30 age:18, 31 sex:'', 32 } 33 34 const person1={ 35 name:'张三', 36 } 37 ReactDOM.render(<PersonComponent name={person1.name}/>,document.getElementById("test"));//不传age和sex时,使用默认值 38 39 </script>

     第三步,对 props 中的属性进行类型限制和必要性限制

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <title>Document</title>
     7     <script src="../js/react.development.js"></script>
     8     <script src="../js/react-dom.development.js"></script>
     9     <script src="../js/prop-types.js"></script>
    10     <script src="../js/babel.min.js"></script>
    11 </head>
    12 <body>
    13     <div id="test1"></div>
    14     <div id="test2"></div>
    15 </body>
    16 </html>
    17 <script type="text/babel">
    18 
    19     function PersonComponent(props){
    20       return (
    21             <ul>
    22                 <li>姓名:{props.name}</li>
    23                 <li>年龄:{props.age}</li>
    24                 <li>性别:{props.sex}</li>
    25             </ul>
    26         )
    27     }
    28     //设置默认属性值
    29     PersonComponent.defaultProps={
    30         age:18,
    31         sex:'',
    32     }
    33     //对props中的属性值进行类型限制和必要性限制
    34     PersonComponent.propTypes={
    35        name:PropTypes.string.isRequired,
    36        age:PropTypes.number,
    37        sex:PropTypes.string,
    38     }
    39     const person1={
    40         name:'张三',
    41     }
    42     ReactDOM.render(<PersonComponent name={person1.name}/>,document.getElementById("test1"));//不传age和sex时,使用默认值
    43 
    44     const person2={
    45         age:'20',
    46         sex:'',
    47     }
    48     ReactDOM.render(<PersonComponent age={person2.age} sex={person2.sex} />, document.getElementById("test2"));
    49     //error1:The prop `name` is marked as required in `PersonComponent`, but its value is `undefined`.不传name的情况
    50     //error2:Invalid prop `age` of type `string` supplied to `PersonComponent`, expected `number`.age类型不是number时的情况
    51 
    52 </script>

     补充,ES6扩展运算符,简介语法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="../js/react.development.js"></script>
        <script src="../js/react-dom.development.js"></script>
        <script src="../js/prop-types.js"></script>
        <script src="../js/babel.min.js"></script>
    </head>
    <body>
    
        <div id="test"></div>
    </body> </html> <script type="text/babel"> function PersonComponent(props){ return ( <ul> <li>姓名:{props.name}</li> <li>年龄:{props.age}</li> <li>性别:{props.sex}</li> </ul> ) } const person3={ name:'lisa', age:20, sex:'', } ReactDOM.render(<PersonComponent {...person3}/>,document.getElementById("test"));//...扩展属性 </script>

    ...的作用:
    1,打包,
    function fn(...as){ }   fn(1,2,3)   

    as 是一个数组, as[ 1, 2, 3 ]
    2,解包
    const arr1=[1,2,3],

    const arr2=['a',...arr1,'b'] 

    arr2=[ 'a' , 1, 2, 3 , 'b' ]

     类定义组件的方式实现

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <title>Document</title>
     7     <script src="../js/react.development.js"></script>
     8     <script src="../js/react-dom.development.js"></script>
     9     <script src="../js/prop-types.js"></script>
    10     <script src="../js/babel.min.js"></script>
    11 </head>
    12 <body>
    13     <div id="test1"></div>
    14     <div id="test2"></div>
        <div id="test3"></div>   15 </body> 16 </html> 17 <script type="text/babel"> 18 19 /* 20 需求: 自定义用来显示一个人员信息的组件, 效果如页面. 说明 21 1). 如果性别没有指定, 默认为男 22 2). 如果年龄没有指定, 默认为18 23 */ 24 //ES6类的方式定义组件,注意props是组件对象中的属性,是this的 25 class PersonComponent extends React.Component { 26 render() { 27 return ( 28 <ul> 29 <li>姓名: {this.props.name}</li> 30 <li>性别: {this.props.sex}</li> 31 <li>年龄: {this.props.age}</li> 32 </ul> 33 ) 34 } 35 } 36 //设置默认属性值 37 PersonComponent.defaultProps={ 38 age:18, 39 sex:'', 40 } 41 //对props中的属性值进行类型限制和必要性限制 42 PersonComponent.propTypes={ 43 name:PropTypes.string.isRequired, 44 age:PropTypes.number, 45 sex:PropTypes.string, 46 } 47 const person1={ 48 name:'张三', 49 } 50 ReactDOM.render(<PersonComponent name={person1.name}/>,document.getElementById("test1"));//不传age和sex时,使用默认值 51 52 const person2={ 53 age:'20', 54 sex:'', 55 } 56 ReactDOM.render(<PersonComponent age={person2.age} sex={person2.sex} />, document.getElementById("test2")); 57 //error1:The prop `name` is marked as required in `PersonComponent`, but its value is `undefined`.不传name的情况 58 //error2:Invalid prop `age` of type `string` supplied to `PersonComponent`, expected `number`.age类型不是number时的情况 59 60 const person3={ 61 name:'lisa', 62 age:20, 63 sex:'', 64 } 65 ReactDOM.render(<PersonComponent {...person3} />,document.getElementById("test3"));//...扩展属性 66 </script>
  • 相关阅读:
    css
    AcWing 145 超市 (贪心)
    AcWing 144 最长异或值路径 (Trie)
    AcWing 143 最大异或对 (Trie)
    AcWing 142 前缀统计 (Trie)
    AcWing 141 周期 (KMP)
    AcWing 139 回文子串的最大长度 (哈希+二分 / Manacher)
    AcWing 136 邻值查找 (set)
    AcWing 133 蚯蚓 (队列)
    AcWing 131 直方图中最大的矩形 (单调栈)
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12486033.html
Copyright © 2011-2022 走看看