2016-10-29 52 views
2

我只是環繞我的頭周圍的終極版,我只是想跑通過state是如何傳遞到減速器一個問題:Redux - 狀態如何傳遞給reducer?

據我瞭解,state結構由combineReducers()功能決定和這些密鑰是你在這個函數內定義的將會變成state的各種屬性。

我是在說是與特定的減速相關的state子集被傳遞到減速機正確嗎?或者是整個state對象通過?

與Redux有很多'ahahhh'時刻...!

回答

2

combineReducers以一些減速器作爲參數並返回一個減速器。由combineReducers創建的特定減速器僅傳遞指定給特定減速器的狀態部分。通過這種方式,每個減速器完全負責自己的國家部分,僅此而已。

但是你可以編寫你自己的聯合減速機,它可以工作不同。這只是說combineReducers沒有什麼特別之處。

reducer只是一個函數,它接受一個狀態和一個動作,並以某種方式返回應用該動作的狀態。或者不是,根據自己的判斷。

例如,在Redux中,狀態的單獨分支處理相同(一組)行爲通常是不同的,但它們以不同的方式處理,這對狀態的該部分有意義。每個行動都會通過combineReducers傳遞給所有子減排者,讓每個分支的減員有機會做某事,或者什麼也不做。

因此,在最常見的用法中,減速器全權負責狀態和子減速器的切片,例如傳遞給組合減速器的那些切片或由您自己的減速器調用的減速器全部負責其子狀態/科。

但是你自己的reducer可能會調用一個子reducer並傳遞任何你喜歡的東西,比如已經傳遞給其他reducer的相同狀態,或者甚至是它創建的一些數據,沒有它在全局中可用州。

這些事情並不常見,但如果你看到需要,並且有信心繼續前進,那麼我們鼓勵你使用你認爲最好的方法。大國有很大的責任。

combineReducers只是一個常見用例的幫助函數。讓一個減速機負責國家的一個特定部門可能是最乾淨的,但是有些情況下你會發現以不同的方式做事情是有益的。一個reducer可以通過嵌套來管理一個複雜的對象,而不需要調用任何其他的reducer,但是一個普通的模式就是使較小的reducer來處理部分,如果父類變得笨拙。

重點是要認識到reducer總是一個純函數,它接受狀態和動作並返回一個狀態。你如何做到這一點完全取決於你。大多數開發人員選擇遵循其他代碼中看到的常見模式,例如Dan的Redux示例或他在egghead.io上的視頻。

在捱打的道路上行駛往往是一個很好的開始,因爲它已經過審查。

但是,出於同樣的原因,知道爲什麼要做某件事總是很重要的。開發人員有時候會讓事情變得比需要的複雜,因爲他們會遵循一個例子,這個例子要麼是針對其他事情的,要麼是沒有很好地開始。

另外read this文章由丹。

+0

非常有幫助的回覆@DDS!我每天都越來越瞭解......我將首先遵循讓reducer處理自己的「state」子集的標準方法,並看看是否遇到任何死刑。我懷疑,如果這是絕大多數情況下的最佳做法,那麼它會適合我。謝謝。 –

+0

@ DDS的反應非常好。您也可以閱讀Redux文檔的新增[「Structuring Reducers」](http://redux.js.org/docs/recipes/StructuringReducers.html)部分,其中描述了一些有用的模式,配方,以及常見的錯誤。 – markerikson

相關問題