2016-10-01 22 views
0

docs中,Dan沒有給出更改調度傳遞到中間件的方式的更多推理。他只是這麼說的:使用redux商店的調度實例與調度傳遞作爲參數

但也有不同的方法來啓用鏈接。中間件 可以接受下一個()調度函數作爲參數,而不是從商店實例中讀取 。

這是什麼原因?對我來說,現在看起來更奇怪,applyMiddleware中的代碼將帶有2個存儲和調度參數,而不是單獨存儲。

回答

2

看起來不可思議不是問題。

const logger = store => next => action => { 
    console.log('dispatching', action) 
    let result = next(action) 
    console.log('next state', store.getState()) 
    return result 
} 

請注意,功能語言在默認情況下具有這種格式,在那裏它是完全正常的。

這樣做的原因是因爲猴子修補程序尚未將自己確定爲推薦的編程方法。將next傳遞給該函數更加靈活,並且不需要任何被調用的函數(開發人員的函數),從而減輕了開發人員的負擔並降低了出錯的機率。最後,丹喜歡解釋他爲什麼要以某種方式編碼,但作爲自由使用者,我們卑微的開發人員並不是決策者。 decision has already been made這是在Redux中使用中間件的方式。您可以隨時將Redux分叉並根據自己的喜好進行修改,但請注意,Redux的強大功能不是lib內的代碼,而是第三方開發人員附帶的代碼。通過不玩耍,你會放棄所有的力量。

1

這是一個非常常見的問題,我將很快添加到Redux常見問題中。

簡而言之,Redux深受函數式編程原理的影響,而Currying則是Dan和Andrew在進行初始設計時碰巧解決的方法。一旦選擇了它,它就基本上保持了這種兼容性。

最初的設計在Redux issue #55中討論過,Dan提議重寫,然後在issue #1744中拒絕他自己的建議。

相關問題