【前端踩過的坑】react-navigation 與redux的配合
阿新 • • 發佈:2018-12-09
在初期使用redux的過程中,想要搭配react-navigation使用(以下簡稱RN,不是react-native),RN負責路由,而redux負責state的統一管理。基本的思路是: PS:為了關注核心刪去了不必要的部分
const ListStack = createStackNavigator(
{
Home: ListScreen
Add: AddScreen,
},
...
);
const mapStateToProps = state => {
return {
dataList: state.list
}
}
const mapDispatchToProps = dispatch => {
...
}
export default connect(mapStateToProps, mapDispatchToProps)(ListStack);
接下來問題就來了,想要傳給ListScreen這個component的dataList屬性是永遠傳不到了,而能獲取到的(如果你在ListScreen列印props的話會發現只有navigation的屬性)。也就是createStackNavigator完全遮蔽了connect傳進來的引數,解決方案當然也很簡單,調整一下順序即可:
const ListStack = createStackNavigator(
{
Home: connect(mapStateToProps, mapDispatchToProps)(ListScreen),
Add: AddScreen,
}
...
);
export default ListStack;
這樣就解決了,但是就是這些回想起來看似簡單,而在實際開發中又浪費了我們太多時間google和思考。回想一下RN和redux在資料傳遞上還真有點像,RN通過props傳遞導航及跳轉資訊,redux通過redux傳遞state資料,所以就產生了衝突,在第一個例子中,RN的state將redux的給遮蔽了。react-navigation的官網倒是有一篇文章叫redux integration,不過講的是如何將redux和RN統一,而不是咱們所需要的互相獨立相容。