Redux的基本使用總結(jié)

一筷弦、Redux的過程

1.使用函數(shù) createStore 創(chuàng)建 store 數(shù)據(jù)點(diǎn)
2.創(chuàng)建 Reducer。它要改變的組件,它獲取 state 和 action斥滤,生成新的 state
3.用 subscribe 監(jiān)聽每次修改情況
4.dispatch 執(zhí)行,reducer(currentState,action) 處理當(dāng)前 dispatch 后的傳入的 action.type 并返回給 currentState 處理后的 state轿秧,通過 currentListeners.forEach(v=>v()) 執(zhí)行監(jiān)聽函數(shù)中跌,并最后返回當(dāng)前 action 狀態(tài)。

export function createStore(reducer) {

    let currentState = {};
    let currentListeners = [];

    // 讀取 store tree中所有state
    function getState() {
      return currentState
    }

    // 注冊(cè) listener菇篡,監(jiān)聽 state 變化
    function subscribe(listener) {
      // 傳入函數(shù)
      currentListeners.push(listener)
    }

    // 分發(fā) action
    function dispatch(action){
      currentState = reducer(currentState,action)
      currentListeners.forEach(v=>v())
      return action
    }

    // 觸發(fā)初始狀態(tài)
    dispatch({type:'@TYRMARS/Mars-Redux'})

    return {getState,subscribe,dispatch}
}

二漩符、如何使用之 Redux 如何管理 state

注冊(cè) store tree

1.Redux 通過全局唯一的 store 對(duì)象管理項(xiàng)目中的 state

const store = createStore(
   reducer,  /* preloadedState, */
   // window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__()
  // 使用 chrome 的 redux-devtools 插件需要加這句話
 );

2.可以通過 store 注冊(cè) listener,注冊(cè)的 listener 會(huì)在 store tree 每次變更后執(zhí)行

constructor(props) {
  super(props);
  ......
  this.storeChange = this.storeChange.bind(this);
  store.subscribe(this.storeChange);
}
......
storeChange() {
    this.setState(store.getState())
}
如何更新 store tree

1.store 調(diào)用 dispatch驱还,通過 action 把變更的信息傳遞給 reducer

const action = { type: 'changeInput' , value: e.target.value };
store.dispatch(action);

2.store 根據(jù) action 攜帶 type 在 reducer 中查詢變更具體要執(zhí)行的方法嗜暴,執(zhí)行后返回新的 state

export default (state = defaultState, action) => {
  // Reducer 里面只能接受 state凸克,不能改變state
  if (action.type === 'changeInput'){
    let newState = JSON.parse(JSON.stringify(state));
    newState.inputValue = action.value;
    // 返回給 store倉(cāng)庫(kù)
    return newState;
  }
  return state;
}

3.reducer 執(zhí)行后返回的新狀態(tài)會(huì)更新到 store tree 中,觸發(fā)由 store.subscribe() 注冊(cè)的所有l(wèi)istener

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闷沥,一起剝皮案震驚了整個(gè)濱河市萎战,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舆逃,老刑警劉巖蚂维,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異路狮,居然都是意外死亡虫啥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門奄妨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涂籽,“玉大人,你說我怎么就攤上這事砸抛∑来疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵直焙,是天一觀的道長(zhǎng)景东。 經(jīng)常有香客問我,道長(zhǎng)箕般,這世上最難降的妖魔是什么耐薯? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮丝里,結(jié)果婚禮上曲初,老公的妹妹穿的比我還像新娘。我一直安慰自己杯聚,他們只是感情好臼婆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幌绍,像睡著了一般颁褂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傀广,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天颁独,我揣著相機(jī)與錄音,去河邊找鬼伪冰。 笑死誓酒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贮聂。 我是一名探鬼主播靠柑,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼寨辩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了歼冰?” 一聲冷哼從身側(cè)響起靡狞,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隔嫡,沒想到半個(gè)月后甸怕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畔勤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蕾各,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庆揪。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妨托,靈堂內(nèi)的尸體忽然破棺而出缸榛,到底是詐尸還是另有隱情,我是刑警寧澤兰伤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布内颗,位于F島的核電站,受9級(jí)特大地震影響敦腔,放射性物質(zhì)發(fā)生泄漏均澳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一符衔、第九天 我趴在偏房一處隱蔽的房頂上張望找前。 院中可真熱鬧,春花似錦判族、人聲如沸躺盛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽槽惫。三九已至,卻和暖如春辩撑,著一層夾襖步出監(jiān)牢的瞬間界斜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工合冀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留各薇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓水慨,卻偏偏與公主長(zhǎng)得像得糜,于是被迫代替她去往敵國(guó)和親敬扛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容