問題描述:
控制臺報出錯誤:dispatch is not a function
,提示下面的代碼有問題吕嘀, 我的代碼如下:
const mapDispatchToProps = dispatch => ({
getPrograms: () => dispatch(actions.getPrograms())
})
矛盾點
仔細看我的mapDispatchToProps 里面的方法黍翎,沒覺得哪里不對的
問題解決
- google 搜索境氢,發(fā)現(xiàn)有人提到connect的使用慎菲,如果是
export default withRouter(connect(mapDispatchToProps)(Index))
這種的,就會出現(xiàn)了上面的錯誤 - 檢查下我的代碼释漆,正好是這個原因绒尊,忘了mapStateToProps。加上就ok了甫菠。那么問題來了挠铲,connect 里面的這個參數(shù)mapStateToProps是必須要有的,為什么呢寂诱?
connect() 接收四個參數(shù)拂苹,它們分別是 mapStateToProps,mapDispatchToProps痰洒,mergeProps和options醋寝。
- mapStateToProps:這個函數(shù)允許我們將 store 中的數(shù)據(jù)作為 props 綁定到組件上搞挣。組件將會監(jiān)聽 Redux store 的變化。任何時候音羞,只要 Redux store 發(fā)生改變囱桨,mapStateToProps 函數(shù)就會被調(diào)用。該回調(diào)函數(shù)必須返回一個純對象嗅绰,這個對象會與組件的 props 合并舍肠。
- mapDispatchToProps: 將 action 作為 props 綁定到 組件上。
- mergeProps:mapStateToProps() 與 mapDispatchToProps() 的執(zhí)行結(jié)果和組件自身的 props 將傳入到這個回調(diào)函數(shù)中窘面。該回調(diào)函數(shù)返回的對象將作為 props 傳遞到被包裝的組件中翠语。
- options:可以定制 connector 的行為。
- 按理來說财边,mapStateToProps 是可以省略的肌括,但為什么當我沒寫的時候這里就報錯了?
酣难。谍夭。。這個還么有研究出來憨募。紧索。。
結(jié)論:當connect的第一個參數(shù)mapStateToProps不能不寫菜谣,當不需要的時候可以這樣寫
connect(null, mapDispatchToProps)(Topic)
或connect(()=>{ return {}}, mapDispatchToProps)(Topic)
,但不能什么都不寫
反思
遇到坑要填坑珠漂,而不是繞過坑,感覺React-redux還是沒有完全吃透尾膊,知道正確的解決方法媳危,但是沒有找到為什么會這樣的原因。冈敛。济舆。