這兩個是Flux架構中的參與成員,Redux中有說明Action的定義:git
Actions(動做)是從你的應用送往store(存儲)的信息負載github
你可能會一直在Action(動做)這裏看到payload
這個字詞,它是負載
或有效數據
的意思,這個字詞的意思解說你能夠看一下,不難理解:redux
Payload用在計算機科學的意思,是指在數據傳輸時的"有效數據"部份,也就是不包含傳輸時的頭部信息或metadata等等用於傳輸其餘數據。它的英文本來是指是飛彈或火箭的搭載的真正有效的負載部份,例如炸藥或核子彈頭,另外的不屬於payload的部份固然就是火箭傳送時用的燃料或控制零件。架構
這個Action是有一個固定格式的,叫做FSA, Flux Standard Action(Flux標準動做),格式會像下面這樣,是個JavaScript的對象字面定義:async
{ type: 'ADD_TODO', payload: { text: 'Do something.' } }
這樣一個用於描述動做的單純對象字面定義,就稱爲Action(動做)。函數
爲何要先寫出明確的Actions(動做),也就是把全部的組件會用到的Actions(動做),所有集中寫到一個檔案中?這也是個硬規則,就像你若是參加奧運的體操比賽,每種項目都有規定的動做,在必定的時間內只能做這些動做,按照表定運行。主要仍是由於Redux並不知道你的應用程序裏會做什麼動做,須要有一個明確說明有哪些動做的地方,在運做時以這個對照表爲基準。學習
固然,Actions(動做)必須要有type(類型),並且在同一個應用中的type(類型)名稱是不能重覆的,它的概念有點相似於數據表中的主鍵屬性。翻譯
那麼Action Creator(動做生成器)又是什麼?設計
在程序語言的函數庫中,若是是個英文的名詞,一般都是表明某種對象或數據格式,例如Action(動做)就是個單純的對象。若是叫什麼xxxxter或xxxxtor的,中文翻譯是"器"、"者",一般就是個函數或方法,像上面的reducer和這裏的Action Creator,都是一種函數。code
Action creator的設計也是由Flux架構來的產物,它是一種輔助用的函數,用來建立Action的。但由於設計的不一樣,在Redux中的Action creator比在Flux更簡單,它一般只用來返回Action對象而已,固然它自己是個函數,在返回前是能夠再針對返回的動做數據先進行運算或整理的,例如像下面這樣的函數:
export function addTodo(text) { return { type: ADD_TODO, text } }
這個addTodo
函數,有一個傳參,這個傳參就會用於組成Action對象中的payload
(有效數據)。
若是一個Action對象簡單到連payload(有效數據)都沒有,一般會是個固定payload(有效數據)的動做,例如每動做一次+1或-1,或是每動做一次在true或false值切換,那麼在Redux中容許連Action或Action Creator均可以不用寫了。可是這種狀況大概只有在很小的應用,或是學習階段的例子纔會這樣,若是應用仍是有必定程度的複雜度,必定都是要寫出來的。
固然,Action Creator天然有它很重要的做用,其中之一就是處理有反作用的運行,例如計時器、Fetch/Ajax等等,由於reducer是一個強制沒法有反作用的純函數,因此Redux中的反作用會寫在在Action Creator裏,不過這須要再配合中介軟件(middleware)來運行,以後的章節會再說明。
注: Action Creator在Redux中並無必定要是個純函數,只是不建議在裏面直接運行有反作用的函數。請參考這篇在stackoverflow的Reduce做者的回答。