1. 程式人生 > >【前端踩過的坑】react-navigation 與redux的配合

【前端踩過的坑】react-navigation 與redux的配合

在初期使用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統一,而不是咱們所需要的互相獨立相容。