context:生产者-消费者模式

适用于祖祖组件之间值的传递,实际更多情况使用react-redux

import React, { Component } from 'react'
import './index.css'

// 创建Context对象
const Mycontext = React.createContext()
const {Provider, Consumer} = Mycontext

export default class A extends Component {
    state = {
        username: 'tom',
        age: 18
    }
    render() {
        const {username, age} = this.state
        return (
            <div className="parent">
                <div>我是A组件</div>
                <div>我的用户名是:{this.state.username}</div>
                {/* <B username={this.state.username}/> */}
                <Provider value={{username, age}}>
                    <B />
                </Provider>
            </div>
        )
    }
}

class B extends Component {
    render() {
        return (
            <div className="child1">
                <div>我是B组件</div>
                <div>我从A组件接收到的用户名是:{this.props.username}</div>
                <C username={this.props.username} />
            </div>
        )
    }
}

// 类式组件
// class C extends Component {
//     // 接收context
//     static contextType = Mycontext
//     render() {
//         console.log(this.context)
//         const {username, age} = this.context
//         return (
//             <div className="child2">
//                 <div>我是C组件</div>
//                 {/* <div>我从A组件接收到的用户名是:{this.props.username}</div> */}
//                 <div>我从A组件接收到的用户名是:{username}, 年龄:{age}</div>
//             </div>
//         )
//     }
// }

// 函数式组件
function C () {
    return (
        <div className="child2">
            <div>我是C组件</div>
            {/* 使用Consumer标签接收 */}
            <Consumer>
                {
                    // value => {
                    //     const {username, age} = value
                    //     return <div>我从A组件接收到的用户名是:{username}, 年龄:{age}</div>
                    // }
                    value => `用户名是:${value.username},年龄是:${value.age}`
                }
            </Consumer>
        </div>
    )
}

results matching ""

    No results matching ""