React学习:context

本文详细介绍如何在React应用中实现主题切换功能,包括定义轻暗两种主题、创建并使用Context进行状态管理,以及如何在组件中消费这些主题设置,实现动态样式更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 实现主题切换

一、定义2中不同主题

const themes = {
    light: {
        classnames: 'btn btn-primary',
        bgColor: 'red',
        color: '#000'
    },
    dark: {
        classnames: 'btn btn-light',
        bgColor: '#blue',
        color: '#fff'
    },
}

二、定义Context;

import React from 'react'

const ThemeContext =React.createContext()

export default ThemeContext

三、使用context.Provider

​
   render() {
        return (
            <ThemeContext.Provider value={themes.light}>
                <div className="App">
                    <header className={"App-header"}>
                        <img src={logo} className={"App-logo"} alt={"logo"}/>
                        <h2>欢迎来到矿洞程序员</h2>
                        <a href="#theme-switcher" className="btn btn-light" onClick={()=>{this.changeTheme('light')}}>浅色主题</a>
                        <a href="#theme-switcher" className="btn btn-secondary" onClick={()=>{this.changeTheme('dark')}}>深色主题</a>
                    </header>
                    <ThemeBar/>
                </div>
            </ThemeContext.Provider>
        );
    }

​

四:定义样式消费组件

import  React from  'react'
import ThemeContext from './Theme-context'

const ThemeBar = () =>{
    return (
        <ThemeContext.Consumer>
            {
                theme=>{
                    // console.log(theme)
                    return (
                        <div className="alert mt-5" style={{backgroundColor:theme.bgColor,color:theme.color}}>样式区域
                         <button>样式按钮</button>
                        </div>
                     )
                }
            }
        </ThemeContext.Consumer>
    )
}
export default ThemeBar

五、查看效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯洁的明依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值