在React中上下文是一种通信方案。

上下文的特点

如何使用上下文

使用上下文穿透和上下文通信的区别

上下文通信在那些场景遇到

使用上下文封装拾色器

import { PureComponent, useState } from "react"
//创建上下文对象
const ThemeContext = React.createContext()
const{Consumer,Provider} = ThemeContext
class App extends PureComponent{
    render(){
        return(
            <Consumer>
            {
                (context) => {
                    console.log(context)
                    return(
                        <div style={context}>
                            <h1>555</h1>
                        </div>
                    )
                }
            }
        </Consumer>
        )
    }
}
//封装拾色器
function ThemeToggle({value, onChange}){
    const change = (ev) =>{
        const key = ev.target.name
        // console.log('key',key);
        const val = ev.target.value
        // console.log('val',val);
        //把变化后的主题色回传给父组件
        onChange({...value, [key]:val})
    }
    return(
        <>
            <div>
                <label >前景色</label>
                <input type="color" name="color" value={value.color} onChange={change} />
                <label >背景色</label>
                <input type="color" name="background" value={value.background} onChange={change} />
            </div>
        </>
    )
}
function A(){
    const[color ,setColor] = useState({color:'#000000',background:'#000000'})
    return(
        <Provider value={color}>
            <h1>拾色器</h1>
            <App />
            <ThemeToggle  value={color} onChange={ev=>setColor(ev)}  />
        </Provider>
       
    )
}
export default A