react中props的使用

使用方法

  1. 基本使用方法

    1. root2.render(<MyComponent name='李四' age="18" gender="男" />);
  2. 批量传值方法

    1. root.render(<MyComponent {...props} />);
    菜鸟教程 React 实例
    复制代码
     <script type="text/babel">
         const root = ReactDOM.createRoot(document.getElementById("root"));
         const root2 = ReactDOM.createRoot(document.getElementById("root2"));
         class MyComponent extends React.Component {
             state = {
                 isHot: true
             }
    
             render() {
                 const { name, age, gender } = this.props;
                 return (
                     <ul>
                         <li>{name}</li>
                         <li>{age}</li>
                         <li>{gender}</li>
                     </ul>
                 )
             }
             // 使用箭头函数来定义方法,确保 this 指向组件实例
             changeWeather = () => {
                 console.log(this);
                 this.setState({
                     isHot: !this.state.isHot
                 });
             }
         }
         const props = {
             name: "张三",
             age: 20,
             gender: "男"
         }
         //传递属性
         root2.render(<MyComponent name='李四' age="18" gender="男" />);
         //批量传递属性
         root.render(<MyComponent {...props} />);
    
    
    
     </script>

输出结果

对props进行限制

复制代码
<script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById("root"));
        const root2 = ReactDOM.createRoot(document.getElementById("root2"));
        class MyComponent extends React.Component {
            state = {
                isHot: true
            }

            render() {
                const { name, age, gender } = this.props;
                return (
                    <ul>
                        <li>{name}</li>
                        <li>{age}</li>
                        <li>{gender}</li>
                    </ul>
                )
            }
            // 使用箭头函数来定义方法,确保 this 指向组件实例
            changeWeather = () => {
                console.log(this);
                this.setState({
                    isHot: !this.state.isHot
                });
            }
        }
        //定义属性类型和默认属性
        MyComponent.propTypes = {
            name: PropTypes.string,
            age: PropTypes.number,
            gender: PropTypes.string,
               speak: PropTypes.func//限制 speak 必须是一个函数
        }
        MyComponent.defaultProps = {
            name: "张三",
            age: 20,
            gender: "男",
            speak: function () {
                console.log("hello");
            }
        }
        //传递属性
        const props = {
            name: "张三",
            age: 20,
            gender: "男"
        }
        //传递属性
        root2.render(<MyComponent name='李四' age={18} gender="男" />);
        //批量传递属性
        root.render(<MyComponent {...props} />);



    </script>

简写props

复制代码
 <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById("root"));
        const root2 = ReactDOM.createRoot(document.getElementById("root2"));
        class MyComponent extends React.Component {
            //定义属性类型和默认属性
            //将 PropTypes 作为静态属性添加到组件类中
            static propTypes = {
                name: PropTypes.string,
                age: PropTypes.number,
                gender: PropTypes.string
            }
            static defaultProps = {
                name: "张三",
                age: 20,
                gender: "男"
            }
            state = {
                isHot: true
            }

            render() {
                const { name, age, gender } = this.props;
                return (
                    <ul>
                        <li>{name}</li>
                        <li>{age}</li>
                        <li>{gender}</li>
                    </ul>
                )
            }
            // 使用箭头函数来定义方法,确保 this 指向组件实例
            changeWeather = () => {
                console.log(this);
                this.setState({
                    isHot: !this.state.isHot
                });
            }
        }

        //传递属性
        const props = {
            name: "张三",
            age: 20,
            gender: "男"
        }
        //传递属性
        root2.render(<MyComponent name='李四' age={18} gender="男" />);
        //批量传递属性
        root.render(<MyComponent {...props} />);



    </script>

类式组件中的构造器

是否写构造器取决于构造器是否接收props参数,是否传递给super,取决于你是否需要在构造器中使用

复制代码
             //定义构造函数
            //构造函数中调用super方法,传递props参数
            //构造器是否接收props参数,是否传递给super,取决于你是否需要在构造器中使用this.props
            constructor(props) {
                super(props);
                console.log("constructor", this.props);
            }

函数式组件使用props

复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>菜鸟教程 React 实例</title>
    <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.8.1/prop-types.js"></script>
    <style>
        .foo {
            color: red;
        }
    </style>
</head>

<body>
    <div id="root"></div>

    <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById("root"));
        function MyComponent(props) {
            const { name, age, gender } = props;    //解构赋值  
            return (
                <ul>
                    <li>{name}</li>
                    <li>{age}</li>
                    <li>{gender}</li>
                </ul>
            );
        }
        MyComponent.propTypes = {
            name: PropTypes.string.isRequired,
            age: PropTypes.number,
            gender: PropTypes.string
        };
    //defaultProps已经被废弃,建议使用函数默认参数代替
    
        MyComponent.defaultProps = {
            name: "张三",
            age: 20,
            gender: "男"
        }
        const props = { name: "张三", age: 18, gender: "男" };
        //批量传递属性
        root.render(<MyComponent {...props} />);



    </script>
</body>

</html>

总结

理解

  1. 每一个组件都有props属性
  2. 组件标签的属性都保存props中

作用

  1. 从组件外部向组件内部传递数据
  2. 注意:组件内部不要修改props数据
相关推荐
郭老二19 小时前
【前端】vue3:编译步骤
前端
不在逃避q19 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁20 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One98520 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易20 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师21 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户0595401744621 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈21 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen1 天前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒1 天前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端