react组件实例三大核心属性之props

本文详细介绍了React组件中的props属性,包括其基本使用、类型限制、默认值设置以及简写方式。通过实例展示了如何在组件中接收和使用props,并利用prop-types库进行属性验证和设置默认值。此外,还提到了使用展开运算符来传递对象属性的便捷方法。
摘要由CSDN通过智能技术生成

三大核心属性分别是:state、props、refs

props属性

  1. 每个组件对象都会有props(properties的简写)属性

  2. 组件标签的所有属性都保存在props中

基本使用:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>1_props的基本使用</title>
</head>
<body>
    <!--准备好一个容器-->
    <div id="test"></div>

    <!--引入react核心库-->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!--引入react-dom,用于支持react操作DOM-->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!--引入babel,用于将jsx转为js-->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel">   //<!--此处一定要写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="sandy" age="18" gender="女"/>,document.getElementById('test'))
    </script>
    </body>
    </html>


三点运算符"…"的使用:(注意,展开运算符不能展开对象)
在这里插入图片描述

在进行下面操作前,特别注意需要添加prop-types.js依赖包:(依赖包下载链接我放文章最下面了)
在这里插入图片描述

对标签属性进行类型、必要性的限制,以及设置默认值:
在这里插入图片描述

优化功能后的完整代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>1_props的基本使用</title>
</head>
<body>
    <!--准备好一个容器-->
    <div id="test1"></div>
    <div id="test2"></div>

    <!--引入react核心库-->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!--引入react-dom,用于支持react操作DOM-->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!--引入babel,用于将jsx转为js-->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <!--引入prop-types,用于将对组件标签属性进行限制-->
    <script type="text/javascript" src="../js/prop-types.js"></script>

    <script type="text/babel">   //<!--此处一定要写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:React.PropTypes.string.isRequired,     //name指定为字符串类型,而且必须得填,不能为空
            gender:React.PropTypes.string,
            age:React.PropTypes.number,
            speak:React.PropTypes.func       //限制speak为函数
        }
        Person.defaultProps = {         //如果gender或者age值为空,就使用默认值
            gender:'男',
            age:18
        }
        //渲染组件到页面
        ReactDOM.render(<Person name="sandy" age={18} gender="女" speak={speak}/>,document.getElementById('test1'))
        const p={name:'小唐',age:18,gender:'女'}
        ReactDOM.render(<Person {...p}/>,document.getElementById('test2'))

        function speak(){
            console.log('happy');
        }
    </script>
    </body>
    </html>

props的简写方式:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>2_props的简写方式</title>
</head>
<body>
    <!--准备好一个容器-->
    <div id="test1"></div>
    <div id="test2"></div>

    <!--引入react核心库-->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!--引入react-dom,用于支持react操作DOM-->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!--引入babel,用于将jsx转为js-->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <!--引入prop-types,用于将对组件标签属性进行限制-->
    <script type="text/javascript" src="../js/prop-types.js"></script>

    <script type="text/babel">   //<!--此处一定要写babel-->
       //创建组件
        class Person extends React.Component{
        //对标签属性进行类型、必要性的限制
        static propTypes={
            name:PropTypes.string.isRequired,     //name指定为字符串类型,而且必须得填,不能为空
            gender:PropTypes.string,
            age:PropTypes.number,
            speak:PropTypes.func,       //限制speak为函数
        }
        static defaultProps = {         //如果gender或者age值为空,就使用默认值
            gender:'男',
            age:18
        }
            render(){
                const {name,age,gender} = this.props
                return (
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                )
            }
        }
        
        //渲染组件到页面
        ReactDOM.render(<Person name="sandy" age={18} gender="女" speak={speak}/>,document.getElementById('test1'))
        const p={name:'小唐',age:18,gender:'女'}
        ReactDOM.render(<Person {...p}/>,document.getElementById('test2'))

        function speak(){
            console.log('happy');
        }
    </script>
    </body>
    </html>

所需相关js依赖包:
链接:https://pan.baidu.com/s/1LWFLfp0OnAZ7tpFZXBep5A
提取码:kA77
(本知识点所需js依赖包库在文件夹“03_依赖包”中的“旧版本”里面)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值