2017-09-14 80 views
1

我有一個文件在root.js的action目錄下。 Root.js將編譯所有其他行動中,和我一起bindActionCreatorsReact redux bindActionCreators的用法

export const all = (store) => { 
    AUTH: bindActionCreators(AUTH.actions, store.dispatch), 
    ....: ..... 
} 

從我瞭解到其綁定,bindActionCreators是汽車的調度操作的目的。 如果是這樣的話,那麼我如何從智能組件訪問它?

我看到dispatch(action)這樣的東西。但從現在我已經將其綁定到全球,我不認爲我需要指定調度了。我該怎麼做,或者有什麼我誤解的部分? 謝謝

回答

3

bindActionCreators - 將創建一個動作對象,每個動作都包裝在dispatch中。
將它們作爲參考傳遞給不應該知道關於reduxdispatch的任何內容的非連接組件是很好的。從DOCS
報價:

唯一的用例bindActionCreators是當你想傳遞一些 行動創下來就是不知道終極版的一個組成部分,而你 不想通過派遣或Redux商店。

所以,如果你想要的連接成分通過動作創作者一個愚蠢的組件,您可以通過bindActionCreators設置一個對象,並使用道具啞分量通過。
實施例:

const myActionCreators = bindActionCreators(Auth.myActions, dispatch) 
<DumbComponent {...myActionCreators} /> 
+0

意思,我不再需要指定mapDispatchToProps? –

+0

我需要mapStateToProps嗎?或者它已經通過連接自動連接到商店?對不起,問..因爲我還在追趕的概念反應終極版 –

+0

你'mapDispatchToProps'返回'bindActionCreators'像'功能mapDispatchToProps(派遣){ 回報bindActionCreators(行動,派遣) } ' –

0

建議的方法是讓每個連接組件文件導入它所需要的動作的創造者,並使用由connect支持「對象簡寫」:

import {addTodo, toggleTodo} from "./todoActions"; 

const actions = {addTodo, toggleTodo}; 

export default connect(null, actions)(TodoList); 
// each TodoList instance now has this.props.addTodo and 
// this.props.toggleTodo, which will dispatch actions when called. 
+0

輝煌。 這是我正在尋找.. 我認爲這種方法更易讀易維護,而不是讓每個智能組件執行自己的調度 –

+0

,但我不能讓它工作.. 我同意這個工作流程雖然 –

+0

你能澄清一下「不起作用」嗎?您是否實際渲染組件的_connected_版本? – markerikson