八、context

2019-01-10  本文已影响0人  懒羊羊3号

旧版

import React from 'react';
import ReactDOM from 'react-dom';
const Component = React.PureComponent;
class Index extends Component {
    static childContextTypes = {
        themeColor: '',
    }
    constructor () {
        super()
        this.state = { themeColor: 'red' }
    }
    getChildContext () {
        return { themeColor: this.state.themeColor }
    }
    render () {
        return (
            <div>
                <Header />
                <Main />
            </div>
        )
    }
}

class Header extends Component {
    render () {
        return (
            <div>
                <h2>This is header</h2>
                <Title />
            </div>
        )
    }
}
class Title extends Component {
    static contextTypes = {
        themeColor: '',
    }
    render () {
        return (
            <h1 style={{color: this.context.themeColor}}>React.js 小书标题</h1>
        )
    }
}

ReactDOM.render(
    <Index />,
    document.getElementById('root')
)

新版

import React from 'react';
import ReactDOM from 'react-dom';

const ThemeContext = React.createContext({
    background: '',
    color: ''
});

class Index extends React.Component {
    render () {
        return (
            <ThemeContext.Provider value={{background: 'green', color: 'red'}}>
                <Header />
            </ThemeContext.Provider>
        );
    }
}

class Header extends React.Component {
    render () {
        return (
            <Title>Hello React Context API</Title>
        );
    }
}

class Title extends React.Component {
    render () {
        return (
            <ThemeContext.Consumer>
                {context => (
                    <h1 style={{background: context.background, color: context.color}}>
                        {this.props.children}
                    </h1>
                )}
            </ThemeContext.Consumer>
        );
    }
}

ReactDOM.render(
    <Index />,
    document.getElementById('root')
)
上一篇下一篇

猜你喜欢

热点阅读