React手稿 - Context

简介: ContextContext提供了除props之外的传参数的方式。Context是全局跨组件传递数据的。APIReact.

Context

Context提供了除props之外的传参数的方式。

Context是全局跨组件传递数据的。

API

  • React.createContext


const {Provider, Consumer} = React.createContext(defaultValue);

Provider


<Provider value={/* some value */}>

Consumer


<Consumer>
  {value => /* render something based on the context value */}
</Consumer>

Example

ThemeContext.js


import React from 'react';

export const themes = {
  light: {
    foreground: '#000000',
    background: '#eeeeee',
  },
  dark: {
    foreground: '#ffffff',
    background: '#222222',
  },
};

export default React.createContext(
  themes.dark // default value
);

ThemedButton.jsx


import React from 'react';
import ThemeContext, {themes} from './ThemeContext';

export default ({children}) => {
  const styles = {
            color: themes[theme].foreground,
            backgroundColor: themes[theme].background
          };
  return (
    <ThemeContext.Consumer>
      {theme => {
        return (
          <button style={styles}>{children}</button>
        )
      }}
    </ThemeContext.Consumer>
  );
}

App.js


import React, {PureComponent} from 'react';
import ThemeContext from './ThemeContext';
import ThemeButton from './ThemedButton';

export default class extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {theme: 'dark'};
  }

  render() {
    return (
      <ThemeContext.Provider value={this.state.theme}>
        <ThemeButton>
          <div onClick={() => {
            this.setState({theme: this.state.theme === 'dark' ? 'light' : 'dark'})
          }}>Themed Button</div>
        </ThemeButton>
      </ThemeContext.Provider>
    );
  }
}

在线示例

推荐阅读《React 手稿》

来源:https://segmentfault.com/a/1190000017070519

相关文章
|
3月前
|
前端开发 API
React 之 Context 的变迁与背后实现
React 之 Context 的变迁与背后实现
39 0
|
1月前
|
前端开发
react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)
react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)
28 0
|
2月前
|
前端开发 调度
react 使用 Reducer 和 Context 进行纵向扩展
react 使用 Reducer 和 Context 进行纵向扩展
|
3月前
|
前端开发 JavaScript API
React的Context API:全局状态管理的利器
【4月更文挑战第25天】React的Context API解决了深层组件间状态共享的难题,提供全局状态管理方案。通过`Provider`和`Consumer`组件,或结合`useContext` Hook,实现状态在组件树中的传递。最佳实践包括避免过度使用,分离逻辑,以及在必要时与Redux或MobX结合。Context API简化了数据传递,但需谨慎使用以保持代码清晰。
|
3月前
|
前端开发
深入理解 React 中的 Context
深入理解 React 中的 Context
|
3月前
|
前端开发
深入理解 React 中的 Context(二)useContext、createContext
深入理解 React 中的 Context(二)useContext、createContext
105 0
|
3月前
|
前端开发
React中兄弟组件通信和组件跨级传递Context的使用
React中兄弟组件通信和组件跨级传递Context的使用
|
3月前
|
前端开发
react的context状态树怎么使用
react的context状态树怎么使用
43 0
|
10月前
|
JavaScript 前端开发 容器
React-跨组件通讯-context
React-跨组件通讯-context
44 0
|
12月前
|
前端开发
React的context传值方法介绍
1.在src在创建一个context.js文件
React的context传值方法介绍

热门文章

最新文章