• React中context的使用方法


    React中context的使用方法

    App.js文件

    // 引入React
    import React, {Component} from 'react';
    // 引入样式
    import './App.css';
    
    /*
    * 详细说明:定义了三个组件:分别为App/AppChild/AppChildChild
    * 组件关系:App -> AppChild 父子; App -> AppChildChild 祖;AppChild -> AppChildChild 父子;
    * 通过下面案例你将领略context的使用方法
    * 使用方法总结:
    * 1.先创建一个Context容器对象,可以进行结构Provider及Consumer方便之后的简单应用。
    * 2.包裹要用的组件,给谁用就在谁的外面包裹,使用属性关键字value进行传值,value不可改变。
    * 3.在哪里使用就在哪里声明,static contextType = 容器对象名字;
    * 4.使用this.content获取
    * 注意上述方法只限于类式组件,如果你使用的是函数式组件,那么你应该用下面的方式去做
    * <Consumer>
    *   {
    *        value => {
    *
    *        }
    *    }
    * </Consumer>
    ***/
    
    // 创建一个Context容器对象,注意开头大写
    const MyContext = React.createContext()
    // 拿出Provider及Consumer
    const {Provider, Consumer} = MyContext;
    
    // 定义一个祖组件
    class App extends Component {
        state = {
            username: 'Tom',
            age: 20
        }
        render() {
            const {username, age} = this.state;
            return (
                <div className="App">
                    <h3>我是App组件</h3>
                    <h4>我的名字:{username}</h4>
                    {/*利用props给子组件AppChild传值*/}
                    {/*给谁用就用Provider包裹*/}
                    {/*<Provider value={username}>
                        <AppChild username={username}/>
                    </Provider>*/}
                    <Provider value={{username, age}}>
                        <AppChild username={username}/>
                    </Provider>
                </div>
            );
        }
    }
    
    // 父级组件
    class AppChild extends Component {
        render() {
            const {username} = this.props;
            return (
                <div className="AppChild">
                    <h3>我是AppChild组件</h3>
                    <h4>我接收来自App组件的名字是:{username}</h4>
                    <AppChildChild/>
                </div>
            );
        }
    }
    
    // 子组件-类式生命
    /*class AppChildChild extends Component {
        // 声明context
        static contextType = MyContext;
        render() {
            const {username, age} = this.context;
            return (
                <div className="AppChildChild">
                    <h3>我是AppChildChild组件</h3>
                    <h4>我接收来自App组件的名字是:{username},年龄:{age}</h4>
                </div>
            );
        }
    }*/
    // 子组件-函数式声明
    function AppChildChild() {
        return (
            <div className="AppChildChild">
                <h3>我是AppChildChild组件</h3>
                <h4>
                    <Consumer>
                        {
                            value => {
                                return `我接收来自App组件的名字是:${value.username},年龄:${value.age}`
                            }
                        }
                    </Consumer>
                </h4>
            </div>
        )
    }
    
    export default App;

    App.css文件

    .App {
      background-color: blue;
      font-size: 20px;
      padding: 10px;
      color: #ffffff;
    }
    .AppChild {
      background-color: orange;
      font-size: 20px;
      padding: 10px;
      color: #ffffff;
    }
    .AppChildChild {
      background-color: red;
      font-size: 20px;
      padding: 10px;
      color: #ffffff;
    }
  • 相关阅读:
    stack 栈
    链表
    2018.09.08 DL24 Day1 总结
    10.07 WZZX Day2总结
    10.06 WZZX Day1总结
    Joseph问题 (线段树)
    [POI2006]TET-Tetris 3D
    10.05FZSZ Day2模拟总结
    Tarjan求LCA
    数据结构
  • 原文地址:https://www.cnblogs.com/shangguancn/p/14957401.html
Copyright © 2020-2023  润新知