[英]redux pre-binding through bindActionCreators, an anti-pattern?
在整個redux App中,我經常使用以下模式
// declare an action creator in a centralized / state management related location in the App (i.e. not the components/containers)
const myActionCreator1 = () => (dispatch) => { ... }
const myActionCreator2 = createAction(ACTION_2)
// then later in a mapDispatchToProps of a Container component
function mapDispatchToProps(dispatch) {
bindActionCreators({myActionCreator1, myActionCreator2}, dispatch);
}
是這些情況,是將動作創建者預先綁定的反模式嗎? 假設在redux中只有1個調度員對1個商店起作用?
即
// actionCreators.ts
export const myActionCreators = {
myActionCreator: bindActionCreators(..., dispatch)
}
如果這種模式沒有缺點,那么簡明扼要的好消息....
澄清度
簡潔的好處只有在多個組件重新使用同一動作創建者時才會顯現。 由於這些組件將不再需要mapDispatchToProps來處理簡單的情況,例如上面的示例
connect
函數支持第二個參數的“對象簡寫”語法。 無需創建一個接收dispatch
的mapDispatchToProps
函數(並且可能在內部使用bindActionCreators
),您可以直接將一個充滿動作創建者的對象直接傳遞給connect
:
const actionCreators = {
addTodo,
toggleTodo
};
export default connect(null, actionCreators)(MyComponent);
充滿動作創建者的對象將通過bindActionCreators
自動運行,並調用this.props.addTodo("Buy Milk")
將適當地分派動作創建者。
我在博客文章Idiomatic Redux中討論了這種方法的一些優點:為什么要使用動作創建者? 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.