React在版本16.3-alpha
里引入了新的Context API,社区一片期待之声。咱们先经过简单的例子,看下新的Context API长啥样,而后再简单探讨下新的API的意义。react
文中的完整代码示例可在笔者的GitHub上找到,点击传送门。git
须要安装16.3-alpha
版本的react。构建步骤非本文重点,可参考笔者GitHub上的demo。github
npm install react@next react-dom@next
复制代码
下面,直接来看代码,若是用过react-redux
应该会以为很眼熟。npm
首先,建立context
实例:redux
import React from 'react';
import ReactDOM from 'react-dom';
// 建立context实例
const ThemeContext = React.createContext({
background: 'red',
color: 'white'
});
复制代码
而后,定义App
组件,注意这里用到了Provider
组件,相似react-redux
的Provider
组件。性能优化
class App extends React.Component {
render () {
return (
<ThemeContext.Provider value={{background: 'green', color: 'white'}}> <Header /> </ThemeContext.Provider> ); } } 复制代码
接下来,定义Header
、Title
组件。注意:bash
Title
组件用到了Consumer
组件,表示要消费Provider
传递的数据。Title
组件是App
的孙
组件,但跳过了Header
消费数据。class Header extends React.Component {
render () {
return (
<Title>Hello React Context API</Title>
);
}
}
class Title extends React.Component {
render () {
return (
<ThemeContext.Consumer> {context => ( <h1 style={{background: context.background, color: context.color}}> {this.props.children} </h1> )} </ThemeContext.Consumer> ); } } 复制代码
最后,常规操做dom
ReactDOM.render(
<App />, document.getElementById('container') ); 复制代码
看下程序运行结果:ide
用过redux + react-redux
的同窗,应该会以为新的Context API很眼熟。而有看过react-redux
源码的同窗就知道,react-redux
自己就是基于旧版本的Context API实现的。性能
既然已经有了现成的解决方案,为何还会有新的Context API呢?
shouldComponentUpdate
性能优化,可能会致使消费了context数据的子组件不更新。更多内容,欢迎你们关注个人公众号,后续进行更新
新的Context API,我的对于性能上的提高更加期待些。至于下降复杂度、取代redux之类的,不是我关注的重点。下一步的计划就是多构造点用例来进行对比测试。