redux中文文件:
阮一峰的網路學習日誌:
redux是js的狀態容器,提供可**化狀態管理
redux除了和react一起用之外還支援 其他介面庫
他體積小(2kb)而且沒有任何依賴
當ui層十分簡單,沒有很多互動,redux就是不必要的,用了反而增加複雜性
以上這些情況不需要使用
以上這些情況可以使用
如果應用不複雜可以不用一 web應用是乙個狀態機,檢視與狀態一一對應
二 所有的狀態,都儲存在乙個物件裡
store
store是儲存資料的地方,整個應用只能有乙個store
createstore函式可用來生成store
/*引入redux*/
import from
"redux"
const store=createstore(fn)
state
store物件包含所有的資料,如果想要得到某個時間點的資料,就要對store生成快照,這種時點的集合就叫做state
/*引入redux*/
import from
"redux";
const store=createstore(fn)
const state=store.getstate();
乙個state對應乙個view
action
state的變換帶動view的變化。但是使用者接觸不到state,使用者接觸到的是view層,當view層發生變化,會發出action,也就是說action是view發出的通知,表示state應該要產生變化
action是乙個物件,其中type屬性是必須的,表示action的名稱,其他屬性可自由設定,
const action=
action描述當前發生的事情,改變state是唯一的辦法,就是使用action,他會把資料運送到store
action creator
view要傳送多少種資訊,就會有多少種action,如果都手寫,比較的麻煩,可以定義乙個函式來生成action,這個函式就是action creater
const add_todo="新增 todo";
function addtodo(params)
}const action=addtodo("learn redux")
addtodo函式就是乙個 action creator
store.dispatch()
store.dispatch()是view發出action的唯一方法
import from "redux";
const store=createstore(fn);
store.dispatch()
結合以上的addtodo函式,可簡寫成
store.dispatch(addtodo("learn redux"))
store收到action之後,必須給出乙個新的state,這樣view才會發生變化,這種計算過程就叫做reducer
reducer是乙個函式,他接受action和當前的state作為引數,返回新的state,
const reducer=function(state,action)
這是乙個例子
const defaultstate=0;
const reducer=(state=defaultstate,action)=>
}//
const state=reducer(1,)
//輸出3
但在實際的應用中,並不會手動的呼叫readucer,store.dispatch方法會觸發readucer的自動執行。為此,store、需要知道readucer函式,所以需要在生成store的時候,將readucer傳入createstore方法
import from
"redux"
const store=createstore(reducer);
//createstore接收reducerr作為引數,以後每當store.dispatch傳送過來乙個新的action,就會自動呼叫readucer,得到新的state。
reducer函式最重要的特徵,他是乙個純函式。也就是說,只要是同樣的輸入,必定得到同樣的輸出
純函式是函式式程式設計的概念,必須遵守一下一些約束,
函式式程式設計:函式是一等公民
store允許使用store.subscribe方法設定監聽函式,一旦state發生變化,就會自動執行這個函式
import from
"redux";
const store=createstore(reducer)
store.subscribe(listener)
只要把view的更新函式放入listen,就會實現view的自動渲染
store.subscribe方法返回乙個函式,呼叫這個函式可以解除監聽
let unsubscribe=store.subscribe(()=>)
+ store.getstate()
+ store.dispatch()
+ store.subscribe()
在引入redux的時候
import from
"redux";
let = createstore(reducer)
createstore可以接受第二個引數let store=createstore(fn,window.state_from_server)
window.state_from_server就是整個應用的初始值,如果提供這個引數,他會覆蓋reducer函式的初始預設值
const
createstore=(reducer)=>;
const
subscripbe=(listener)=>
};dispatch({});
return ;
}
reducer可生成state,整個應用只有乙個state物件,包含所有的資料,當state十分龐大的時候,reducer函式也十分龐大。
例如
const chatreducer=(state=defaultstate,action={})=>=action;
switch (type),state,);
case change_status:
return
object.assign({},state,);
case change_username:
return
object.assign({},state,);
default:return state;
}}
以上**中三種action分別改變state的三個屬性
import from
"redux";
const chatreducer=combinereducer()
這段**的意思是combinereducer方法將三個reducer合併成乙個大的函式; Redux學習總結一
參考阮一峰部落格 redux教程 web應用是乙個狀態機,檢視與狀態是一一對應的。所有狀態都儲存在乙個物件裡面。store是儲存資料的地方,可以將其看成乙個容器,整個應用只能有乙個store.state是store物件的某個時點的資料集合,當前時刻的state可以通過store.getstate 得...
Redux原始碼學習篇 一 redux實現
本文會逐步探索redux到應用分為3個系列 redux 實現 react redux 實現 redux中介軟體的應用與實現 案例場景 現在有乙個計數器,或者點讚場景 現在用redux如何記錄呢?import from redux action const like like const unlike...
redux學習心得(一)
redux 三個基本原則 唯一資料來源 保持狀態唯讀 資料改變只能通過純函式完成 應用的狀態資料應該只儲存在唯一的乙個store上。就是說不能直接去修改狀態,要修改store狀態,必須要派發乙個action物件完成。在redux中,每個reducer的函式簽名如下 reducer state,act...