# 祖孫級傳遞數據
## context特性
> 記住一串單詞組合`getChildContextTypes`
> 前3個、后3個、后兩個
> 一個方法、兩個靜態屬性
1.給組先級書寫一個方法
```
getChildContext(){ return {color:this.state.color}}
```
2.在祖先級使用屬性校驗規定一下給子組件的數據類型,需要定義一個靜態的(static) `childContextTypes`
```javascript
static childContextTypes = {
color:ReactProps.string
}
```
3.孫子組件,使用之前先檢驗一下數據類型,需要定義一下
```javascript
static contextTypes = {
color:ReactProps.string
}
```
4.再使用{this.context.color}
# 非父子組件通信
沒有嵌套關系的,那只能通過影響全局的一些機制去實現。這樣看,自定義事件機制不失為一種很好的方案。在這邊使用了 `EventEmitter` 模塊(`npm`包 `node`的基礎模塊)進行通信。
安裝自定義事件庫`yarn add enentemitter2`相當于(vue-bus)
```
import React, {Component,PropTypes} from 'react'
import ReactDom from 'react-dom'
//1.導入
import {EventEmitter2} from 'eventemitter2'
//2.生成實例
var emitter = new EventEmitter2()
class First extends Component {
constructor(props){
super(props)
this.state = {
data: 'init First'
}
//監聽
emitter.on('changeFirstText', this.changeText.bind(this))
}
changeText( msg ){
this.setState({
data: 'First change success: origin ' + msg
})
}
render (){
return <div>
<h1>{this.state.data}</h1>
</div>
}
}
class Second extends Component {
handleClick(){
//4.觸發
emitter.emit('changeFirstText', 'Second')
}
render (){
return <div onClick={ this.handleClick.bind(this) }>
<button>點擊修改 First 組件內容</button>
</div>
}
}
```
- webpack復習
- React基礎
- 前端三大主流框架對比
- React中幾個核心的概念
- React基礎語法
- React JSX語法
- React組件
- 普通組件
- 組件通信-父向子傳遞
- 組件拆成單個文件
- 面向對象復習
- Class組件基礎
- Class組件的私有狀態(私有數據)
- 案例:實現評論列表組件
- 組件樣式管理
- 組件樣式分離-樣式表
- CSS模塊化
- 生命周期
- React組件生命周期
- Counter組件來學習組件生命周期
- 生命周期總結
- 生命周期案例
- React評論列表
- React雙向數據綁定
- React版todolist
- 其它提高(了解)
- 組件默認值和數據類型驗證
- 綁定this并傳參的三種方式
- 祖孫級和非父子組件傳遞數據(了解)
- React路由
- 路由基礎
- 動態路由
- 路由嚴格模式
- 路由導航定位
- 路由重定向
- 路由懶加載
- WolfMovie項目
- 項目初始化
- AntDesign使用
- 其它相關了解