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之類的,不是我關注的重點。下一步的計劃就是多構造點用例來進行對比測試。
更多內容,歡迎你們關注個人公衆號,後續進行更新