利用 useContext 以及useReducer进行改变color颜色

srs/Colors/index.js

import React from 'react'
import Btns from './Button'
import Color from './CoLors'
import {ColorText} from './methods'
function Texts() {
    return (
        <div>
            111
            <ColorText>
            <Color/>
            <Btns/>
            </ColorText>
        </div>
    )
}
export default Texts

srs/Colors/Colors.js

import React,{useContext} from 'react'
import {ColorContext} from './methods'
function Color (){
    const {color} = useContext(ColorContext)
    return(
        <div style = {{color}}>
            字体颜色{color}
        </div>
    )
}
export default Color

srs/Colors/methods.js

import React ,{createContext,useReducer} from 'react'

export const ColorContext = createContext({})

export const UPDATE_COLOR = 'UPDATE_COLOR'

const reducer = (state,action) =>{
    switch (action.type) {
        case UPDATE_COLOR:
            return action.color
        default:
            return state
    }
}

export const ColorText = props =>{
    const [color , dispatch] = useReducer(reducer,'green')
    return(
        <ColorContext.Provider value={{color,dispatch}} >
            {props.children}
        </ColorContext.Provider>   
    )
}

srs/Colors/Button.js

import React ,{useContext}from 'react'
import {ColorContext,UPDATE_COLOR} from './methods'
function Btns (){
    const {dispatch} = useContext(ColorContext)
    return(
        <div >
            <button onClick={()=>{dispatch({type:UPDATE_COLOR,color:'yellow'})}}>黄色</button>
            <button onClick={()=>{dispatch({type:UPDATE_COLOR,color:'red'})}}>红色</button>
        </div>
    )
}

export default Btns

src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './colors/index';


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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值