react中props的使用

使用方法

  1. 基本使用方法

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

    1. root.render(<MyComponent {...props} />);
    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>菜鸟教程 React 实例</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script> <style> .foo { color: red; } </style> </head> <body>
    复制代码
     <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>
    </body> </html>

输出结果

对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数据
相关推荐
左&耳3 小时前
完整的 React + Umi 状态体系全景图
react.js·1024程序员节
一个处女座的程序猿O(∩_∩)O3 小时前
Vue-Loader 深度解析:原理、使用与最佳实践
前端·javascript·vue.js
一点一木4 小时前
火山方舟 Responses API 实战指南:从概念到「公司尽调 Dossier 生成器」
前端·人工智能·api
还是大剑师兰特4 小时前
TypeScript 面试题及详细答案 100题 (91-100)-- 工程实践与框架集成
前端·javascript·typescript·1024程序员节
用户47949283569154 小时前
typeof null === 'object':JavaScript 最古老的 bug 为何 30 年无法修复?
前端·javascript·面试
__WanG4 小时前
如何编写标准StatefulWidget页面
前端·flutter
非凡ghost5 小时前
By Click Downloader(下载各种在线视频) 多语便携版
前端·javascript·后端
非凡ghost5 小时前
VisualBoyAdvance-M(GBA模拟器) 中文绿色版
前端·javascript·后端
非凡ghost5 小时前
K-Lite Mega/FULL Codec Pack(视频解码器)
前端·javascript·后端