摘要:那么動(dòng)作生成器又是什么在程序語(yǔ)言的函數(shù)庫(kù)中,如果是個(gè)英文的名詞,通常都是代表某種對(duì)象或數(shù)據(jù)格式,例如動(dòng)作就是個(gè)單純的對(duì)象。
這兩個(gè)是Flux架構(gòu)中的參與成員,Redux中有說(shuō)明Action的定義:
Actions(動(dòng)作)是從你的應(yīng)用送往store(存儲(chǔ))的信息負(fù)載
你可能會(huì)一直在Action(動(dòng)作)這里看到payload這個(gè)字詞,它是負(fù)載或有效數(shù)據(jù)的意思,這個(gè)字詞的意思解說(shuō)你可以看一下,不難理解:
Payload用在計(jì)算機(jī)科學(xué)的意思,是指在數(shù)據(jù)傳輸時(shí)的"有效數(shù)據(jù)"部份,也就是不包含傳輸時(shí)的頭部信息或metadata等等用于傳輸其他數(shù)據(jù)。它的英文原本是指是飛彈或火箭的搭載的真正有效的負(fù)載部份,例如炸藥或核子彈頭,另外的不屬于payload的部份當(dāng)然就是火箭傳送時(shí)用的燃料或控制零件。
這個(gè)Action是有一個(gè)固定格式的,叫作FSA, Flux Standard Action(Flux標(biāo)準(zhǔn)動(dòng)作),格式會(huì)像下面這樣,是個(gè)JavaScript的對(duì)象字面定義:
{ type: "ADD_TODO", payload: { text: "Do something." } }
這樣一個(gè)用于描述動(dòng)作的單純對(duì)象字面定義,就稱為Action(動(dòng)作)。
為什么要先寫出明確的Actions(動(dòng)作),也就是把所有的組件會(huì)用到的Actions(動(dòng)作),全部集中寫到一個(gè)檔案中?這也是個(gè)硬規(guī)則,就像你如果參加奧運(yùn)的體操比賽,每種項(xiàng)目都有規(guī)定的動(dòng)作,在一定的時(shí)間內(nèi)只能作這些動(dòng)作,按照表定運(yùn)行。主要還是因?yàn)镽edux并不知道你的應(yīng)用程序里會(huì)作什么動(dòng)作,需要有一個(gè)明確說(shuō)明有哪些動(dòng)作的地方,在運(yùn)作時(shí)以這個(gè)對(duì)照表為基準(zhǔn)。
當(dāng)然,Actions(動(dòng)作)必需要有type(類型),而且在同一個(gè)應(yīng)用中的type(類型)名稱是不能重覆的,它的概念有點(diǎn)類似于數(shù)據(jù)表中的主鍵屬性。
那么Action Creator(動(dòng)作生成器)又是什么?
在程序語(yǔ)言的函數(shù)庫(kù)中,如果是個(gè)英文的名詞,通常都是代表某種對(duì)象或數(shù)據(jù)格式,例如Action(動(dòng)作)就是個(gè)單純的對(duì)象。如果叫什么xxxxter或xxxxtor的,中文翻譯是"器"、"者",通常就是個(gè)函數(shù)或方法,像上面的reducer和這里的Action Creator,都是一種函數(shù)。
Action creator的設(shè)計(jì)也是由Flux架構(gòu)來(lái)的產(chǎn)物,它是一種輔助用的函數(shù),用來(lái)創(chuàng)建Action的。但因?yàn)樵O(shè)計(jì)的不同,在Redux中的Action creator比在Flux更簡(jiǎn)單,它通常只用來(lái)返回Action對(duì)象而已,當(dāng)然它本身是個(gè)函數(shù),在返回前是可以再針對(duì)返回的動(dòng)作數(shù)據(jù)先進(jìn)行運(yùn)算或整理的,例如像下面這樣的函數(shù):
export function addTodo(text) { return { type: ADD_TODO, text } }
這個(gè)addTodo函數(shù),有一個(gè)傳參,這個(gè)傳參就會(huì)用于組成Action對(duì)象中的payload(有效數(shù)據(jù))。
如果一個(gè)Action對(duì)象簡(jiǎn)單到連payload(有效數(shù)據(jù))都沒(méi)有,通常會(huì)是個(gè)固定payload(有效數(shù)據(jù))的動(dòng)作,例如每動(dòng)作一次+1或-1,或是每動(dòng)作一次在true或false值切換,那么在Redux中允許連Action或Action Creator都可以不用寫了。但是這種情況大概只有在很小的應(yīng)用,或是學(xué)習(xí)階段的例子才會(huì)這樣,如果應(yīng)用還是有一定程度的復(fù)雜度,一定都是要寫出來(lái)的。
當(dāng)然,Action Creator自然有它很重要的作用,其中之一就是處理有副作用的運(yùn)行,例如計(jì)時(shí)器、Fetch/Ajax等等,因?yàn)閞educer是一個(gè)強(qiáng)制無(wú)法有副作用的純函數(shù),所以Redux中的副作用會(huì)寫在在Action Creator里,不過(guò)這需要再配合中介軟件(middleware)來(lái)運(yùn)行,之后的章節(jié)會(huì)再說(shuō)明。
注: Action Creator在Redux中并沒(méi)有一定要是個(gè)純函數(shù),只是不建議在里面直接運(yùn)行有副作用的函數(shù)。請(qǐng)參考這篇在stackoverflow的Reduce作者的回答。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81349.html
摘要:實(shí)例講解示例代碼地址在這里你可以通過(guò)命令到本地,也可以直接下載。之后便可以通過(guò)執(zhí)行示例代碼。下面結(jié)合實(shí)例中的內(nèi)容理解上述概念。更改應(yīng)用的狀態(tài)通過(guò)方法將發(fā)送到函數(shù)中,進(jìn)行狀態(tài)的更新。分別用來(lái)處理頁(yè)面和頁(yè)面狀態(tài)的更新。 實(shí)例講解Redux 示例代碼地址在這里 ,你可以通過(guò)git clone命令clone到本地,也可以直接下載。 然后通過(guò)執(zhí)行npm install 安裝所依賴的模塊 。之后便...
摘要:沿著管道有兩組偵聽(tīng)器中間件和訂閱。中間件是可以偵聽(tīng)傳入的動(dòng)作的函數(shù),支持諸如,或偵聽(tīng)器之類的工具。將視為一個(gè)帶有更新前更新后鉤子的全局對(duì)象,以及能夠以簡(jiǎn)單的方式合成新?tīng)顟B(tài)。應(yīng)將兩者視為一體,并且不再需要文件導(dǎo)出類型的字符串。 難道現(xiàn)在狀態(tài)管理不是一個(gè)可以解決的問(wèn)題嗎?直觀地說(shuō),開(kāi)發(fā)人員似乎知道一個(gè)隱藏的事實(shí):狀態(tài)管理的使用似乎比需要的更困難。在本文中,我們將探討一些你可能一直在問(wèn)自己的...
摘要:應(yīng)用這說(shuō)明并不是單指設(shè)計(jì)給用的,它是獨(dú)立的一個(gè)函數(shù)庫(kù),可通用于各種應(yīng)用。在數(shù)據(jù)流的最后,要觸發(fā)最上層組件的,然后進(jìn)行整體的重新渲染工作。單純?cè)诘膶?duì)象上是沒(méi)有辦法使用,要靠額外的函數(shù)庫(kù)才能這樣作,這是一定要使用類似像這種函數(shù)庫(kù)的主要原因。 Redux的官網(wǎng)中用一句話來(lái)說(shuō)明Redux是什么: Redux是針對(duì)JavaScript應(yīng)用的可預(yù)測(cè)狀態(tài)容器 這句話雖然簡(jiǎn)短,其實(shí)是有幾個(gè)涵義的: ...
摘要:只要一個(gè)有,那無(wú)論用什么設(shè)備訪問(wèn),都會(huì)得到這個(gè)還原也是相當(dāng)簡(jiǎn)單把數(shù)據(jù)庫(kù)備份導(dǎo)入到另一臺(tái)機(jī)器,部署同樣的運(yùn)行環(huán)境與代碼。純粹只是一個(gè)狀態(tài)管理庫(kù),幾乎可以搭配任何框架使用上述例子連都沒(méi)用哦親下一章進(jìn)階教程 Redux 簡(jiǎn)明教程 原文鏈接(保持更新):https://github.com/kenberkele... 寫在前面 本教程深入淺出,配套 簡(jiǎn)明教程、進(jìn)階教程(源碼精讀)以及文檔注釋...
摘要:不只為組件提供中的數(shù)據(jù)及擴(kuò)展方法,它還為定義的組件添加了一系列事件操作,這些事件的核心點(diǎn)就是,然后可以在自己定義的組件內(nèi)獲得。行為功能是對(duì)目的功能和有用行為的一種抽象。下一個(gè)中間件函數(shù)通常由名為的變量來(lái)表示。 redux 這個(gè)是好久之前寫的,一直忘記粘過(guò)來(lái),里面有一些是寫作格式是我自己定義的,所以和segmentfault的markdown語(yǔ)法有出入,圖片也不能加載,所以原文效果可以在...
閱讀 2169·2021-11-15 11:36
閱讀 1516·2021-09-23 11:55
閱讀 2505·2021-09-22 15:16
閱讀 2038·2019-08-30 15:45
閱讀 1875·2019-08-29 11:10
閱讀 1039·2019-08-26 13:40
閱讀 929·2019-08-26 10:44
閱讀 3181·2019-08-23 14:55