react16:props的使用

props的基本使用

props的基本使用:<Person name="张三" gender="男" age="18"/>

<!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>test</title> 
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
</head>
<body>
    <div id="root"></div>  
    <script type="text/babel">

        class Person extends React.Component{
            render(){
                const {name,age,gender} = this.props;
                return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                )
            }
        }

        ReactDOM.render(<Person name="张三" gender="男" age="18"/>,document.getElementById("root"));
    </script>
</body>
</html>

props的语法糖

props的语法糖:<Person {...p1}/>

<!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>test</title> 
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
</head>
<body>
    <div id="root"></div>  
    <script type="text/babel">

        class Person extends React.Component{
            render(){
                const {name,age,gender} = this.props;
                return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                )
            }
        }

        const p1 = {
            name:"李四",
            gender:"男",
            age:"19"
        }
        ReactDOM.render(<Person {...p1}/>,document.getElementById("root"));
    </script>
</body>
</html>

这里涉及到扩展运算符(...)的使用。扩展运算符很常用,以下是它的一些应用场景。

  • 平铺数组。
let arr = [1,3,5]; console.log(...arr); // 1 3 5
  • 连接数组。
let arr1 = [1,3,5];
let arr2 = [2,7,9];
console.log([...arr1,...arr2]); // [1, 3, 5, 2, 7, 9]
  • 函数形参。
function add(...numbers){
    return numbers.reduce((preValue,currentValue) => preValue+=currentValue,0);
}
let sum = add(1,2,3,4,5); console.log(sum); // 15
  • 构建字面量对象。
let obj = {
    a:100,
    b:200
}
const obj2 = {...obj};
console.log(obj2); // {a: 100, b: 200}
  • 合并对象。
let obj = {
    a:"hello",
    b:"world"
}
let obj2 = {
    x:100,
    y:200
}
let obj3 = {...obj,...obj2};
console.log(obj3);  //{a: 'hello', b: 'world', x: 100, y: 200}

限制props

可以对props进行限制,如限制props的类型、必要性,指定默认值。
首先,需要下载并引入prop-types.js,本例使用15.6.2版本,可到这里下载。

<!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>test</title> 
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
    <script src="./js/prop-types.js"></script>
</head>
<body>
    <div id="root"></div> 
    <div id="app"></div>
    <script type="text/babel">

        class Person extends React.Component{
            render(){
                const {name,age,gender} = this.props;
                return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                )
            }
        }

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

        Person.defaultProps = {
            age:20,
            gender:"男"
        }

        ReactDOM.render(<Person name="张三" age="18" gender="男"/>,document.getElementById("root"));
        ReactDOM.render(<Person name="李四" />,document.getElementById("app"));

    </script>
</body>
</html>

propTypes,对props的类型、必要性进行限制

  • name:PropTypes.string.isRequired ,要求name为字符串类型,且必须传。
  • age:PropTypes.number ,要求age为数值类型。
  • gender:PropTypes.string,要求gender为字符串类型。

defaultProps,用于指定props的默认值。

限制props的简写形式

  1. 类中定义的方法,放在类的原型对象上,供所有实例使用。
  2. 类中的赋值语句,等号左侧的属性或方法,放在类的实例对象上。
  3. 类中的赋值语句,前面加static修饰后,等号左侧的属性或方法,会放在类本身。

根据第3点:“类中,static修改的赋值语句,等号左侧的属性或方法,会放在类本身”,可以对props限制进行简写:将propTypesdefaultProps放入类中。如下。

<!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>test</title> 
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
    <script src="./js/prop-types.js"></script>
</head>
<body>
    <div id="root"></div> 
    <div id="app"></div>
    <script type="text/babel">

        class Person extends React.Component{
            static propTypes = {
                name:PropTypes.string.isRequired,
                age:PropTypes.numbers,
                gender:PropTypes.string
            }
            
            static defaultProps = {
                age:20,
                gender:"男"
            }

            render(){
                const {name,age,gender} = this.props;
                return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                )
            }
        }

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

        Person.defaultProps = {
            age:20,
            gender:"男"
        }

        ReactDOM.render(<Person name="张三" age="18" gender="男"/>,document.getElementById("root"));
        ReactDOM.render(<Person name="李四" />,document.getElementById("app"));

    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值