簡體   English   中英

redux通過bindActionCreators(一種反模式)進行預綁定?

[英]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函數支持第二個參數的“對象簡寫”語法。 無需創建一個接收dispatchmapDispatchToProps函數(並且可能在內部使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM