• React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值


      创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    1、react组件

    1.1、创建组件的方法

      1.1.1、函数组件

      定义一个组件最简单的方式是使用JavaScript函数

    function fn(props){
        return <h1>Hello,{props.name}</h1>;
    }
    该函数是一个React组件,它接收一个单一的 " props " 对象并返回了一个React 元素。我们之所以称这种类型的组件为函数组件

      1.1.2、类组件

    //引入react模块
    import React from 'react';
    //声明子组件son
    class R extends React.Component {//重写方法render
        render() {
            return (
                // 模板字串
                <React.Fragment>
                    {/* jsx */}
              <h1>hello,{props.name}</h1> 
    </React.Fragment> ); } }

    1.2组件的props属性

      先在组件上通过自定义属性赋值

      函数组件中,在函数上定义形参props,在函数中 props.属性名

    function name(props) {
        console.log(props)//输出‘Tom’
    }

      类组件中,通过 this.props.属性名

    class Rea extends React.Component {
        render() {
            return (
                <React.Fragment>
                    {console.log(this.props.name)}
                    {/* 输出’Tom‘ */}
                </React.Fragment>
            );
        }
    }

    作用:在组件之间进行传值

    特点:无论是使用函数或是类来声明一个组件,它不能修改它自己的props值。是只可读不可写

    1.3组件的state属性

      state的使用

    //引入react模块
    import React from 'react'
    class Act extends React.Component {
        constructor(){
            super()
            this.state={
                name:'lxr'
            }
        }
        render() {
            return (
                <React.Fragment>
                    {console.log(this.state.name)}
                    {/* 这里输出name值为’lxr‘ */}
                </React.Fragment>
            );
        }
    }

      通过修改状态来更改name值

    //引入react模块
    import React from 'react';
    
    class Act extends React.Component {
        constructor(){
            super()
            this.state={
                name:'lxr'
            }
        }
        update(){
            //重新设置name值
            this.setState({
                name:'rlh'
            })
        }
        render() {
            return (
                <React.Fragment>
                    {/* 这里绑定事件 */}
                   <button onClick={this.update.bind(this)} >点击</button>
                    {console.log(this.state.name)}
                </React.Fragment>
            );
        }
    }

      state是组件内独有的,外部无法向内部传递state,也无法直接改变state的值

    而改变state是使用React组件基类中的一个自带函数:

    this.setState({
      ...
    });

      使用这个函数之前一定要注意this的作用域,箭头函数中的this指向外部this,而普通函数中的this指向函数本身

     

    2、react传值

    2.1、父传子

    //引入react模块
    import React from 'react';
    //引入Son模块
    import Son from './Son';
    
    //声明父组件father
    class Father extends React.Component {
        //父类方法render
        render() {
            return (
                <React.Fragment>
                    {/* 使用子模块Son 并把mess传给子组件,方法名为mess */}
                    <Son mess='父组件传来的' />
                </React.Fragment>
            );
        }
    }
    
    export default Father;
    //引入react模块
    import React from 'react';
    //声明子组件son
    class Son extends React.Component {
        
        //子类方法render
        render() {
            return (
                <React.Fragment>
                    {/* 用构造方法里的props来调父组件传来的mess */}
                    {console.log(this.props.mess)}
                </React.Fragment>
            );
        }
    }
    //向外暴露
    export default Son

       子组件输出父组件传来的值

    2.2、子传父

    //引入react模块
    import React from 'react';
    //引入Son模块
    import Son from './Son';
    
    //声明父组件father
    class Father extends React.Component {
        //父组件的father方法
        father(msg){
            console.log(msg)
        }
    
        //父类方法render
        render() {
            return (
                <React.Fragment>
                    {/* 使用子模块Son 把父组件的father方法传给子组件*/}
                    <Son father= {this.father.bind(this)} />
                </React.Fragment>
            );
        }
    }
    //向外暴露
    export default Father;
    //引入react模块
    import React from 'react';
    //声明子组件son
    class Son extends React.Component {
        
        //子类方法render
        render() {
            return (
                <React.Fragment>
                    {/* 调用父组件传来的father方法 */}
                    {this.props.father('来自子组件传来的数据')}
                </React.Fragment>
            );
        }
    }
    //向外暴露
    export default Son

    父组件输出子组件传来的值

    2.3、兄弟相传

    • 父组件
    //引入react模块
    import React from 'react';
    //引入Son模块
    import Son from './Son';
    //引入Son0模块
    import Son0 from './Son0';
    
    //声明父组件father
    class Father extends React.Component {
        constructor(){
            super()
            //给state定义mess为空值
            this.state={
                mess:''
            }
        }
        //父组件的father方法
        father(msg){
            //控制台输出子组件传来的数据
            // console.log(msg)//输出:来自son的数据
            //给状态里的mess设置值
            this.setState({
                mess:msg
            })
        }
    
        //父类方法render
        render() {
            return (
                <React.Fragment>
                    {/* 使用子模块Son 把父组件的father方法传给子组件*/}
                    <Son father= {this.father.bind(this)} />
                    {/* 把子组件son传来的值再传给子组件son0 */}
                    <Son0 mess={this.state.mess} />
                </React.Fragment>
            );
        }
    }
    //向外暴露
    export default Father;
    • 子组件1
    //引入react模块
    import React from 'react';
    //声明子组件son
    class Son extends React.Component {
        //子组件的son方法
        son(){
            //使用father传来的方法,并返回数据
            this.props.father('来自son的数据')
        }
        //子类方法render
        render() {
            return (
                <React.Fragment>
                    {/* 绑定click时间点击的时候调用son方法 */}
                    <button onClick={this.son.bind(this)}>来自子组件的按钮</button>
                </React.Fragment>
            );
        }
    }
    //向外暴露
    export default Son
    • 子组件2
    //引入react模块
    import React from 'react';
    //声明子组件son0
    class Son0 extends React.Component {
        //子类方法render
        render() {
            return (
                <React.Fragment>
                    {console.log(`我是Son0 这是:${this.props.mess}`)}
                </React.Fragment>
            );
        }
    }
    
    export default Son0;

    当我点击button按钮的时候

     son0.js输出来自son.js的数据

          

           

         

       

  • 相关阅读:
    C#线程同步(1)- 临界区&Lock
    详细解析Java中抽象类和接口的区别
    防止重复提交的几种办法
    网页中实现JSON的编辑与显示
    xcode5 ios7升级后的一系列问题解决
    hadoop-2.0.0-mr1-cdh4.2.0源码编译总结
    hadoop-2.0.0-cdh4.2.1源码编译总结
    cocos2d-iphone加入芒果广告
    hadoop2.0 eclipse 源码编译
    HBase学习笔记
  • 原文地址:https://www.cnblogs.com/linxiaoran/p/12072365.html
Copyright © 2020-2023  润新知