每天学点React - 组件实例的三大核心属性之一 - props

72 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

组件实例的三大核心属性之一 - props

基本使用

最基础的用法是通过外面的标签传递参数给类进行构建渲染。

<!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>Document</title>
</head>
<body>
        <!-- 测试容器 -->
        <div id="test"></div>
        <div id="test2"></div>
        <div id="test3"></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>
    
        <!-- 设置类型为babel -->
        <script type="text/babel">
            // 创建组件
            class Person extends React.Component{
                render() {
                    const {name, age, sex} = this.props
                    return (
                        <ul>
                            <li>姓名:{name}</li>
                            <li>性别:{sex}</li>
                            <li>年龄:{age}</li>
                        </ul>
                    )
                }
            }
    
            // 将组件渲染到页面
            ReactDOM.render(<Person name='张三' sex='男' age='30'/>, document.getElementById('test'))
            ReactDOM.render(<Person name='李四' sex='男' age='40'/>, document.getElementById('test2'))
            const ww = {name:'王五', sex:'男', age:'50'}
            ReactDOM.render(<Person {...ww}/>, document.getElementById('test3'))
        </script>
</body>
</html>

image.png

对props进行限制

  • 对标签属性进行类型鉴别
    • 字符串
    • 数值
    • 函数
  • 对标签属性进行必要性校验
  • 对标签属性进行默认值赋值
<!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>Document</title>
</head>
<body>
        <!-- 测试容器 -->
        <div id="test"></div>
        <div id="test2"></div>
        <div id="test3"></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>
    
        <!-- 设置类型为babel -->
        <script type="text/babel">
            // 创建组件
            class Person extends React.Component{
                render() {
                    const {name, age, sex} = this.props
                    return (
                        <ul>
                            <li>姓名:{name}</li>
                            <li>性别:{sex}</li>
                            <li>年龄:{age}</li>
                        </ul>
                    )
                }
            }

            Person.propTypes = {
                // React15及之前
                // name: React.PropTypes.string

                // 现在字符串类型,必填
                name: PropTypes.string.isRequired,
                // 限制字符串类型
                sex: PropTypes.string,
                // 限制数值类型
                age: PropTypes.number,
                // 限制函数
                speak: PropTypes.func
            }

            Person.defaultProps = {
                sex: '保密'
            }
    
            // 将组件渲染到页面
            ReactDOM.render(<Person name='张三' sex='男' age={30} speak={speak}/>, document.getElementById('test'))
            ReactDOM.render(<Person name='李四' sex='男' age={40}/>, document.getElementById('test2'))
            const ww = {name:'王五', sex:'男', age:50}
            ReactDOM.render(<Person {...ww}/>, document.getElementById('test3'))

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