//toggleButton demo:

//code:

//1.Appb.js:

  1. import React from 'react';
  2. import {ThemeContext, themes} from './theme-context';
  3. import ThemeTogglerButton from './theme-toggler-button';
  4.  
  5. class Appb extends React.Component {
  6. constructor(props) {
  7. super(props);
  8.  
  9. this.toggleTheme = () => {
  10. this.setState(state => ({
  11. theme:
  12. state.theme === themes.dark
  13. ? themes.light
  14. : themes.dark,
  15. }));
  16. };
  17. // State 包含了 updater 函数 所以它可以传递给底层的 context Provider
  18. this.state = {
  19. theme: themes.light,
  20. toggleTheme: this.toggleTheme,
  21. };
  22. }
  23.  
  24. render() {
  25. // 入口 state 传递给 provider
  26. return (
  27. <ThemeContext.Provider value={this.state}>
  28. <Content />
  29. </ThemeContext.Provider>
  30. );
  31. }
  32. }
  33.  
  34. function Content() {
  35. return (
  36. <div>
  37. <ThemeTogglerButton />
  38. </div>
  39. );
  40. }
  41.  
  42. export default Appb
//2.theme-toggler-button.js:
  1. import {ThemeContext} from './theme-context';
  2. import React from 'react';
  3.  
  4. function ThemeTogglerButton() {
  5. // Theme Toggler 按钮不仅接收 theme 属性
  6. // 也接收了一个来自 context 的 toggleTheme 函数
  7. return (
  8. <ThemeContext.Consumer>
  9. {({theme, toggleTheme}) => (
  10. <button
  11. onClick={toggleTheme}
  12. style={{backgroundColor: theme.background}}>
  13. Toggle Theme
  14. </button>
  15. )}
  16. </ThemeContext.Consumer>
  17. );
  18. }
  19.  
  20. export default ThemeTogglerButton;
//3.theme-context.js:
  1. // 确保默认值按类型传递
  2. // createContext() 匹配的属性是 Consumers 所期望的
  3. import React from 'react';
  4. export const themes = {
  5. light: {
  6. foreground: '#ffffff',
  7. background: '#222222',
  8. },
  9. dark: {
  10. foreground: '#000000',
  11. background: '#eeeeee',
  12. },
  13. };
  14. export const ThemeContext = React.createContext({
  15. theme: themes.dark,
  16. toggleTheme: () => {},
  17. });

react context toggleButton demo的更多相关文章

  1. React context基本用法

    React的context就是一个全局变量,可以从根组件跨级别在React的组件中传递.React context的API有两个版本,React16.x之前的是老版本的context,之后的是新版本的 ...

  2. [React] Prevent Unnecessary Rerenders of Compound Components using React Context

    Due to the way that React Context Providers work, our current implementation re-renders all our comp ...

  3. React Context API

    使用React 开发程序的时候,组件中的数据共享是通过数据提升,变成父组件中的属性,然后再把属性向下传递给子组件来实现的.但当程序越来越复杂,需要共享的数据也越来越多,最后可能就把共享数据直接提升到最 ...

  4. 探索 Redux4.0 版本迭代 论基础谈展望(对比 React context)

    Redux 在几天前(2018.04.18)发布了新版本,6 commits 被合入 master.从诞生起,到如今 4.0 版本,Redux 保持了使用层面的平滑过渡.同时前不久, React 也从 ...

  5. React Hooks +React Context vs Redux

    React Hooks +React Context vs Redux https://blog.logrocket.com/use-hooks-and-context-not-react-and-r ...

  6. [译]迁移到新的 React Context Api

    随着 React 16.3.0 的发布,context api 也有了很大的更新.我已经从旧版的 api 更新到了新版.这里就分享一下我(作者)的心得体会. 回顾 下面是一个展示如何使用旧版 api ...

  7. 使用react context实现一个支持组件组合和嵌套的React Tab组件

    纵观react的tab组件中,即使是github上star数多的tab组件,实现原理都非常冗余. 例如Github上star数超四百星的react-tab,其在render的时候都会动态计算哪个tab ...

  8. [译]React Context

    欢迎各位指导与讨论 : ) 前言 由于笔者英语和技术水平有限,有不足的地方恳请各位指出.我会及时修正的 O(∩_∩)O 当前React版本 15.0.1 时间 2016/4/25 正文 React一个 ...

  9. React Native官方DEMO

    官方给我们提供了UIExplorer项目,这里边包含React Native的基本所有组件的使用介绍和方法. 运行官方DEMO步骤如下 安装react native环境 React Native项目源 ...

随机推荐

  1. 3.3 PXC Strict Mode

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  2. Sci-Hub

    提到Sci-Hub这个文献下载利器,大家肯定都不陌生.你在各大SCI杂志上看到的英文文献,90%以上都能免费下载.因为它严重侵犯了爱思唯尔.施普林格.Wiley等各大出版商的利益,遭到起诉与封杀. 不 ...

  3. OpenERP中自定义模块卸载失败,Postgres数据库删不掉数据库,OpenERP登录不了一直在加载的问题解决方案。

    解决方案也就是删除掉不用的数据库,OE会提示当前有N个Session不让Drop数据库. 对于Postgres 9.1 版本,在pgAdmin中查询以下语句: SELECT pg_terminate_ ...

  4. asp.net 网站在Apache下的配置,就这么简单

    asp.net 网站在Apache下的配置,就这么简单 # # Virtual Hosts # # If you want to maintain multiple domains/hostnames ...

  5. Acronis

    关于这个神奇的东西也没少折腾了我,这里是它的家:http://www.acronis.com/zh-cn/ 网上也看了一些,没有头绪,总之给我的感觉就是不明觉厉.这里小结自己的学到的一些东西,算是一整 ...

  6. Java Web入门学习(二) Eclipse的配置

    Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后 ...

  7. RabbitMQ初学之一:exchange与queue的绑定

    最近公司需要使用RabbitMQ,但我之前一直使用的是ActiveMQ,对RabbitMQ进行了初步的学习,但是还不系统,自己做了一些小测试,怕自己以后忘了 一. 背景 拿到代码以后,发现,生产者在向 ...

  8. struts2上传单个文件

    项目目录: struts.xml配置: <constant name="struts.enable.DynamicMethodInvocation" value=" ...

  9. Hadoop Gateway 部署

    1.集群的 hadoop-current hive-current spark-current copy 到 gateway 机器 2.集群的 hadoop-conf       hive-conf ...

  10. WPF 自定义NotifyPropertyChanged

    该工具类实现INotifyPropertyChanged接口 /// <summary> /// 实现了属性更改通知的基类 /// </summary> public clas ...