React-05React中props属性(传递数据),propTypes校验,类式与函数式组件props的使用

1.类式组件props基本数据读取与解构运算符传递

javascript 复制代码
 <script type="text/babel">
        //  创建组件
        class PersonalInfo extends React.Component {
            render() {
                // 读取props属性 并读取值
                console.log('props',this.props);
                return(
                    <ul>
                        <li>姓名:{this.props.name}</li>
                        <li>性别:{this.props.gender}</li>
                        <li>年龄:{this.props.age}</li>
                    </ul>
                ) 
            }
        }
        // 渲染组件
        const p ={name:'岂不闻',gender:'男',age:'24'}
        // 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递
        ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))
        ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))
    </script>

2.类式组件propTypes校验props传递数据规则

propTypes是react提供的一种工具,对于组件的props进行类型检查

2.1 html引入prop-types.js
javascript 复制代码
 <!--  {/* // 引入 PropTypes */} -->
 <script src="https://unpkg.com/[email protected]/prop-types.js"></script>
2.2 react脚手架引入
javascript 复制代码
npm install prop-types
2.3 propTypes验证器声明类型

基本数据类型

javascript 复制代码
PropTypes.string:字符串
PropTypes.number:数字
PropTypes.boolean:布尔值
PropTypes.object:对象
PropTypes.array:数组
PropTypes.func:函数
PropTypes.symbol:Symbol

特殊类型

javascript 复制代码
PropTypes.node:任何可以被渲染的内容:数字、字符串、元素或数组(包括这些类型)
PropTypes.element:React元素
PropTypes.instanceOf(Class):某个类的实例

组合类型

javascript 复制代码
PropTypes.oneOf(['option1', 'option2']):枚举类型,值必须是所提供选项之一
PropTypes.oneOfType([PropTypes.string, PropTypes.number]):多个类型中的一个
PropTypes.arrayOf(PropTypes.number):某种类型组成的数组
PropTypes.objectOf(PropTypes.number):某种类型组成的对象
PropTypes.shape({ key: PropTypes.string, value: PropTypes.number }):具有特定形状的对象
2.4具体代码例子

指定标签默认属性

javascript 复制代码
        // 指定标签默认属性
        PersonalInfo.defaultProps = {
            name: '未知',
            gender: '未知',
            age: 0
        }

props传递限制传递数据规则

javascript 复制代码
 PersonalInfo.propTypes = {
            // 限定为字符串类型 必填项
            name: PropTypes.string.isRequired,
            gender: PropTypes.string.isRequired,
            age: PropTypes.number.isRequired
        }

扩展运算符批量传入

javascript 复制代码
        // 渲染组件
        const p ={name:'岂不闻',gender:'男',age:'24'}
        // 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递
        ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))

整体代码

html 复制代码
<!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>Hello,React</title>
</head>

<body>
    <!-- 容器 -->
    <div id="test1"></div>
    <!-- 容器 -->
    <div id="test2"></div>
    <!-- {/* // 引入 React核心库 */} -->
    <script src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <!-- {/* // 引入 react-dom 用于支持 react 操作 DOM */} -->
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <!-- {/* // 引入 babel:1. ES6 ==> ES5 2. jsx ==> js */} -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <!--  {/* // 引入 PropTypes */} -->
    <script src="https://unpkg.com/[email protected]/prop-types.js"></script>
    <script type="text/babel">
        //  创建组件
        class PersonalInfo extends React.Component {
            render() {
                // 读取props属性 并读取值
                console.log('props',this.props);
                const {name,gender,age} = this.props;
                return(
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                ) 
            }
        }
        // 指定标签默认属性
        PersonalInfo.defaultProps = {
            name: '未知',
            gender: '未知',
            age: 0
        }
        // props传递限制传递数据规则
        PersonalInfo.propTypes = {
            // 限定为字符串类型 必填项
            name: PropTypes.string.isRequired,
            gender: PropTypes.string.isRequired,
            age: PropTypes.number.isRequired
        }

        // 渲染组件
        const p ={name:'岂不闻',gender:'男',age:'24'}
        // 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递
        ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))
        ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))

    </script>
</body>

</html>

3.类式组件props的简写方式 (static 关键字)

javascript 复制代码
 <script type="text/babel">
        // 创建组件
        class PersonalInfo extends React.Component {
            // 指定标签默认属性
            static defaultProps = {
                name: '未知',
                gender: '未知',
                age: 0
            }
            // props传递限制传递数据规则
            static propTypes = {
                // 限定为字符串类型 必填项
                name: PropTypes.string.isRequired,
                gender: PropTypes.string.isRequired,
                age: PropTypes.number.isRequired
            }
            
            render() {
                // 读取props属性 并读取值
                console.log('props',this.props);
                const {name,gender,age} = this.props;
                return(
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                ) 
            }
        }
        
        // 渲染组件
        const p ={name:'岂不闻',gender:'男',age:'24'}
        // 展开运算符  解构赋值 babel+react 解构运算符 仅使用与标签中数据传递
        ReactDOM.render(<PersonalInfo {...p} />,document.getElementById('test1'))
        ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))

    </script>

4.函数式组件props的使用

javascript 复制代码
 <script type="text/babel">
        // 指定标签默认属性
        PersonalInfo.defaultProps = {
                name: '未知',
                gender: '未知',
                age: 0
            }
        //  props传递限制传递数据规则
        PersonalInfo.propTypes = {
            // 限定为字符串类型 必填项
            name: PropTypes.string.isRequired,
            gender: PropTypes.string.isRequired,
            age: PropTypes.number.isRequired
        }

        // 函数式组件
        function PersonalInfo(props){
            // 解构赋值
            const {name,gender,age} = props;
            return(
                    <ul>
                        <li>姓名:{name}</li>
                        <li>性别:{gender}</li>
                        <li>年龄:{age}</li>
                    </ul>
                ) 
        }

        // 组件渲染
        ReactDOM.render(<PersonalInfo name='呀呀呀' gender='女' age='23' />,document.getElementById('test2'))

    </script>
相关推荐
Tetap7 分钟前
element-plus color-pick扩展记录
前端·vue.js
H5开发新纪元9 分钟前
从零开发一个基于 DeepSeek API 的 AI 助手:完整开发历程与经验总结
前端·架构
HHW10 分钟前
告别龟速下载!NRM:前端工程师的镜像源管理加速器
前端
伶俜monster12 分钟前
Threejs 奇幻几何体:边缘、线框、包围盒大冒险
前端·webgl·three.js
用户114818678948426 分钟前
大文件下载、断点续传功能
前端·nestjs
顾林海27 分钟前
Flutter 文本组件深度剖析:从基础到高级应用
android·前端·flutter
夜宵饽饽27 分钟前
传输层-MCP的搭建(一)
javascript·后端
eason_fan27 分钟前
在 Windows 环境下使用 Linux 命令行:Cygwin 的安装与配置
前端·命令行
HHW27 分钟前
NVM:node版本管理工具
前端
阿炸28 分钟前
Promise及其API源码的实现思考过程
前端·javascript