今天要在web子庫里面寫學(xué)生界面相關(guān)內(nèi)容,由于我是剛被切換到這個(gè)項(xiàng)目上不久揍移,所以對這個(gè)子庫不是很了解,但是我發(fā)現(xiàn)web子庫里面是寫一期項(xiàng)目的學(xué)生寫的代碼反肋,結(jié)構(gòu)根本不清楚那伐,然后今天和同學(xué)用了一下午時(shí)間把結(jié)構(gòu)弄清楚,那么我做了一個(gè)梳理和總結(jié)石蔗,記錄下來
哇罕邀,好亂啊
再解說一下:
1.添加頁簽
在如下文件中添加頁簽
每一個(gè)頁簽是一個(gè)
<a onClick={this.handleClick.bind(null, item.mark, this.state.currentState)}> 頁簽 </a>
里面還要寫上
Reflux 將reflux的
UserCenterStore
綁定進(jìn)來
mixins: [Reflux.connect(UserCenterStore)],
寫上
getInitialState
方法,初始化 默認(rèn)的currentState
的值是‘userDetail’
养距,表示每次進(jìn)入學(xué)生界面都會默認(rèn)顯示第一個(gè)頁簽對應(yīng)的頁面诉探。在頁簽的點(diǎn)擊事件
handleClick
里面調(diào)用了Reflux的actions 為‘changeState’
的方法,如下:
UserCenterActions.changeState(mark,currentState)
方法棍厌,它會觸發(fā)UserCenterStore
里面的onChangeState
方法肾胯,來改變getInitialState
函數(shù)里的currentState
的值
(改變currentState
的只的原理是:當(dāng)點(diǎn)擊某一個(gè)頁簽的時(shí)候,會將該頁簽所對應(yīng)的mark
屬性賦值給currentState
)
真相如下:
注意:頁簽的點(diǎn)擊事件中調(diào)用的方法:
UserCenterActions.changeState(mark,currentState)
耘纱,對應(yīng)的是Reflux的action為‘changeState’
敬肚,那么‘changeState’
所觸發(fā)的事件是UserCenterStore
中的onChangeState
方法
2.添加自己的組件
3 . 通過className
來控制每個(gè)頁簽所對應(yīng)的頁面的隱藏和顯示:
如果當(dāng)前頁面是頁簽A所對應(yīng)的頁面,那么當(dāng)我點(diǎn)擊下頁簽A的時(shí)候揣炕,點(diǎn)擊事件里面就會執(zhí)行一個(gè)方法
UserCenterActions.changeState(mark,currentState);
來改變getInitialState
函數(shù)里面的curentState
的值為當(dāng)前頁簽所對應(yīng)的mark
屬性值帘皿; 那么在該頁面所在組件里面做className
判斷的時(shí)候
var classString = (this.state.currentState === 'mentorManagement' ? '' : ' hide');
(注意: 這里的字符串’mentorManagement‘
,就是當(dāng)前頁面所對應(yīng)的頁簽的mark
)畸陡,如下:
this.state.currentState
它就是等于mark
屬性值的鹰溜,那么上上 個(gè) 圖中的classString
的值就等于``, 所以當(dāng)前頁簽所對應(yīng)的頁面所在的組件是顯示的!
那么對于其他的頁簽丁恭,如頁簽B曹动,也要做同樣判斷,在頁簽B所對應(yīng)的頁面所在組件中牲览,是通過currentState
來獲取className
的值就是’hide‘
墓陈,因?yàn)楫?dāng)前currentState
的值肯定是不等于該頁簽B所對應(yīng)的mark
屬性值啊,所以該組件的className
為hide
第献,那么該組件就隱藏肮北亍!