zoukankan      html  css  js  c++  java
  • React跨组件通讯

    import React, { Component ,createContext} from 'react'
    
    console.log(createContext())
    const {
        Provider, //提供者
        Consumer:CounterConsumer //解构出来重新赋值给一个CounterConsumer的组件
    } = createContext()
    
    //封装一个基本的Provider,直接使用Provider,不方便管理状态
    class CounterProvider extends Component{
        constructor () {
            super()
            //这里的状态就是共享的,任何CounterProvider后代组件都可以通过CounterConsumer获取
            this.state = {
                count:100
            }
        }
    
        incrementCount = () => {
            this.setState({
                count:this.state.count + 1
            })
        }
        decrementCount = () => {
            this.setState({
                count:this.state.count - 1
            })
        }
        render() {
            return (
                //使用Provider组件 ,它必须要有一个value值,可传递任何数据(一般传递对象)
                <Provider 
                value={{
                        count:this.state.count,
                        incrementCount:this.incrementCount,
                        decrementCount:this.decrementCount,
                }}>
                {this.props.children}
                </Provider>
            )
        }
    }
    
    class Counter extends Component{
        render(){
            return(
            <CounterConsumer>
                {
                    //CounterConsumer的children必须是一个方法,这个方法有一个参数就是Provider组件的value
                    ({count})=>{
                    return <span>{count}</span>
                    }
                }
            </CounterConsumer>
            
            )
        }
    }
    class CountBtn extends Component{
        render(){
            return(
                <CounterConsumer>
                    {
                        ({incrementCount,decrementCount})=>{
                            const handle = this.props.type == 'decrement' ? decrementCount : incrementCount
                            return <button onClick={handle}>{this.props.children}</button>
                        }
                    }
                    
                </CounterConsumer>
            
            )
        }
    }
    //被提供者(CounterProvider)包囊的组件(CountBtn,Counter)都可以用(CounterConsumer)获得提供者的值
    class Content extends Component {
        render() {
            return (
                <CounterProvider>
                    <div>
                        <CountBtn type="decrement" >-</CountBtn>
                        <Counter />
                        <CountBtn type="increment" >+</CountBtn>
                    </div>
                </CounterProvider>
                
            )
        }
    }
    export default Content
  • 相关阅读:
    Feature Extractor[ResNet]
    Feature Extractor[inception v2 v3]
    Feature Extractor[batch normalization]
    Feature Extractor[googlenet v1]
    Feature Extractor[content]
    Feature Extractor[VGG]
    object detection[rfcn]
    【小白的CFD之旅】05 补充基础
    【小白的CFD之旅】04 任务
    【小白的CFD之旅】03 老蓝
  • 原文地址:https://www.cnblogs.com/finnlee/p/13642995.html
Copyright © 2011-2022 走看看