學(xué)習(xí)redux知識小結(jié)

redux

react中狀態(tài)管理工具遏插,用來管理應(yīng)用中的數(shù)據(jù)调煎。

核心

Action:行為的抽象,視圖中的每個(gè)用戶交互都是一個(gè)action纳寂。比如:點(diǎn)擊按鈕主穗。
Reducer:行為響應(yīng)的抽象,也就是:根據(jù)action行為毙芜,執(zhí)行相應(yīng)的邏輯操作忽媒,更新state。比如:點(diǎn)擊按鈕后腋粥,添加任務(wù)猾浦,那么,添加任務(wù)這個(gè)邏輯放到Reducer中灯抛;創(chuàng)建State金赦。
Store:1.Redux應(yīng)用只能有一個(gè)store;2.getState() 獲取state对嚼;3.diapatch(action) 更新state夹抗。


在Redux中,所有的數(shù)據(jù)(比如state)被保存在一個(gè)被稱為store的容器中纵竖,在一個(gè)應(yīng)用程序中只能有一個(gè)漠烧。store本質(zhì)上是一個(gè)狀態(tài)樹,保存了所有對象的狀態(tài)靡砌。任何UI組件都可以直接從store訪問特定對象的狀態(tài)已脓。要通過本地或遠(yuǎn)程組件更改狀態(tài),需要分發(fā)一個(gè)action通殃。分發(fā)在這里意味著將可執(zhí)行信息發(fā)送到store度液。當(dāng)一個(gè)store接收到一個(gè)action,它將把這個(gè)action代理給相關(guān)的reducer画舌。reducer是一個(gè)純函數(shù)堕担,它可以查看之前的狀態(tài),執(zhí)行一個(gè)action并且返回一個(gè)新的狀態(tài)曲聂。

/* action */

// 在 redux 中霹购,action 就是一個(gè)對象
// action 必須提供一個(gè):type屬性,表示當(dāng)前動(dòng)作的標(biāo)識
// 其他的參數(shù):表示這個(gè)動(dòng)作需要用到的一些數(shù)據(jù)
{ type: 'ADD_TODO', name: '要添加的任務(wù)名稱' }

// 這個(gè)動(dòng)作表示要切換任務(wù)狀態(tài)
{ type: 'TOGGLE_TODO', id: 1 }


/* reducer */

// 第一個(gè)參數(shù):表示狀態(tài)(數(shù)據(jù))朋腋,我們需要給初始狀態(tài)設(shè)置默認(rèn)值
// 第二個(gè)參數(shù):表示 action 行為
function todo(state = [], action) {
  switch(action.type) {
    case 'ADD_TODO':
      state.push({ id: Math.random(), name: action.name, completed: false })
      return state
    case 'TOGGLE_TODO':
      for(var i = 0; i < state.length; i++) {
        if (state[i].id === action.id) {
          state[i].completed = !state[i].completed
          break
        }
      }
      return state
    default:
      return state
  }
}

// 要執(zhí)行 ADD_TODO 這個(gè)動(dòng)作:
dispatch( { type: 'ADD_TODO', name: '要添加的任務(wù)名稱' } )

// 內(nèi)部會調(diào)用 reducer
todo(undefined, { type: 'ADD_TODO', name: '要添加的任務(wù)名稱' })

一個(gè)例子:

import { createStore } from "redux";
import { combineReducers } from 'redux';

const productsReducer = function(state=[], action) {
  return state;
}

const initialState = {
  cart: [
    {
      product: 'bread 700g',
      quantity: 2,
      unitCost: 90
    },
    {
      product: 'milk 500ml',
      quantity: 1,
      unitCost: 47
    }
  ]
}

const ADD_TO_CART = 'ADD_TO_CART';

const cartReducer = function(state=initialState, action) {
  switch (action.type) {
    case ADD_TO_CART: {
      return {
        ...state,
        cart: [...state.cart, action.payload]
      }
    }

    default:
      return state;
  }
}

function addToCart(product, quantity, unitCost) {
  return {
    type: ADD_TO_CART,
    payload: {
      product,
      quantity,
      unitCost
    }
  }
}

const allReducers = {
  products: productsReducer,
  shoppingCart: cartReducer
}

const rootReducer = combineReducers(allReducers);

let store = createStore(rootReducer);

console.log("initial state: ", store.getState());

let unsubscribe = store.subscribe(() =>
  console.log(store.getState())
);

store.dispatch(addToCart('Coffee 500gm', 1, 250));
store.dispatch(addToCart('Flour 1kg', 2, 110));
store.dispatch(addToCart('Juice 2L', 1, 250));

unsubscribe();
歡迎關(guān)注
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末齐疙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子旭咽,更是在濱河造成了極大的恐慌贞奋,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轻专,死亡現(xiàn)場離奇詭異忆矛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門催训,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洽议,“玉大人,你說我怎么就攤上這事漫拭⊙切郑” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵采驻,是天一觀的道長审胚。 經(jīng)常有香客問我,道長礼旅,這世上最難降的妖魔是什么膳叨? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮痘系,結(jié)果婚禮上菲嘴,老公的妹妹穿的比我還像新娘。我一直安慰自己汰翠,他們只是感情好龄坪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著复唤,像睡著了一般健田。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佛纫,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天妓局,我揣著相機(jī)與錄音,去河邊找鬼雳旅。 笑死跟磨,一個(gè)胖子當(dāng)著我的面吹牛间聊,可吹牛的內(nèi)容都是我干的攒盈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼哎榴,長吁一口氣:“原來是場噩夢啊……” “哼型豁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尚蝌,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤迎变,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后飘言,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衣形,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谆吴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倒源。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖句狼,靈堂內(nèi)的尸體忽然破棺而出笋熬,到底是詐尸還是另有隱情,我是刑警寧澤腻菇,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布胳螟,位于F島的核電站,受9級特大地震影響筹吐,放射性物質(zhì)發(fā)生泄漏糖耸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一丘薛、第九天 我趴在偏房一處隱蔽的房頂上張望蔬捷。 院中可真熱鬧,春花似錦榔袋、人聲如沸周拐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妥粟。三九已至,卻和暖如春吏够,著一層夾襖步出監(jiān)牢的瞬間勾给,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工锅知, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留播急,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓售睹,卻偏偏與公主長得像桩警,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子昌妹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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