React Native能否使用react-router-dom的BrowserRouter、Switch、Route及Provider?
结论先行
Provider组件可以直接在React Native项目中使用,BrowserRouter、Route、Switch三个路由相关组件不可直接使用。
Provider组件的使用说明
Provider 是react-redux库提供的跨平台组件,Web端和Native端用法完全一致,你只需要正常安装react-redux及对应的状态管理依赖后,直接在根组件外层包裹即可,和你给出的Web端写法没有任何差异。
路由组件替代方案
react-router-dom是专门针对Web环境封装的路由库,依赖浏览器History API、DOM等Web专属能力,React Native环境不支持这些特性,因此无法直接使用,有两种成熟的替代方案可选:
方案1:使用react-router-native(react-router官方Native端实现)
和react-router-dom的API设计高度一致,学习成本极低,替换步骤如下:
- 安装依赖:
npm install react-router-native react-router # 或yarn安装 yarn add react-router-native react-router
- 替换原有路由组件即可,对应映射关系:
BrowserRouter替换为NativeRouter- v5版本的react-router-native可直接使用
Switch,v6版本需替换为Routes Route组件用法基本一致,仅v6版本有少量参数调整
和你原有Web写法对齐的v5版本示例代码如下:
import React from 'react'; import { NativeRouter as Router, Route, Switch } from 'react-router-native'; import { Provider } from 'react-redux'; // 注意RN端没有Web的DOM类Layout组件,需要你自己实现适配RN的布局组件 import Layout from './your-native-layout-component'; import Home from './Home'; const App = () => ( <Provider store={store}> <Router> <Layout> <Switch> <Route exact path='/' component={Home} /> </Switch> </Layout> </Router> </Provider> );
方案2:使用React Native生态主流的react-navigation
这是目前RN生态市占率最高的路由库,针对原生端的导航交互、手势操作、性能做了深度优化,更贴近原生APP的使用体验,全新的RN项目更推荐选择这个方案。
内容的提问来源于stack exchange,提问作者user16137336
相关产品推荐
相关产品推荐

