1
1
# umi-preset-react-navigation
2
2
3
- 支持在 RN 应用中 使用 [ react-navigation] ( https://reactnavigation.org/ ) 替换 [ umi] ( https://umijs.org/ ) 内置的 [ react-router] ( https://reacttraining.com/react-router/ ) 。
3
+ 针对 [ react-navigation] ( https://reactnavigation.org/ ) 的 [ umi] ( https://umijs.org/ ) 插件集。
4
+
5
+ 支持在 RN 应用中替换 [ umi] ( https://umijs.org/ ) 默认的 [ react-router] ( https://reacttraining.com/react-router/ ) 。
6
+
7
+ 内置[ react-navigation] ( https://reactnavigation.org/ ) ` 5.x ` 版本,需要 [ react-native] ( https://reactnative.dev/ ) ** 0.60.0 及以上版本(>=0.60.x)** 。
4
8
5
9
_ 了解如何使用[ umi] ( https://umijs.org/ ) 开发 RN 应用,请移步至:_ <a href =" https://github.com/xuyuanxiang/umi-react-native#readme " target =" _blank " >umi-react-native</a >
6
10
@@ -20,13 +24,9 @@ _了解如何使用[umi](https://umijs.org/)开发 RN 应用,请移步至:_<
20
24
- react-native-safe-area-context
21
25
- @react-native-community/masked-view
22
26
23
- ** 强烈推荐** 使用 RN 0.60.0 及以上版本,否则安装会及其繁琐。
24
-
25
- ### RN` 0.60.x ` 版本
26
-
27
- ** umi-preset-react-navigation** 内置了[ react-navigation] ( https://reactnavigation.org/ ) 所有依赖最新版本。
27
+ ** umi-preset-react-navigation** 内置了上面所有依赖。
28
28
29
- 在 RN 工程根目录,使用 yarn 安装** umi-preset-react-navigation** 即可:
29
+ 只需在 RN 工程根目录,使用 yarn 安装** umi-preset-react-navigation** 即可:
30
30
31
31
``` npm
32
32
yarn add umi-preset-react-navigation --dev
@@ -40,39 +40,28 @@ cd ios && pod install
40
40
41
41
** 注意:**
42
42
43
- 虽然有[ 自动链接] ( https://github.com/react-native-community/cli/blob/master/docs/autolinking.md ) 功能,如果还是出现了原生代码报错 ,在 RN 工程根目录下手动重新链接一下 :
43
+ 虽然有[ 自动链接] ( https://github.com/react-native-community/cli/blob/master/docs/autolinking.md ) 功能,如果还是发生了意外 ,在 RN 工程根目录下手动重新链接一下可以解决大部分的出现了原生代码报错 :
44
44
45
45
``` npm
46
46
yarn react-native unlink && yarn react-native link
47
47
# ./node_modules/.bin/react-native unlink && ./node_modules/.bin/react-native link
48
48
```
49
49
50
- 每次添加原生依赖,都需要执行:` yarn ios ` 和` yarn android ` 重新编译和启动 iOS 和 Android 工程。
51
-
52
- ** RN` 0.60.x ` 版本安装至此结束。**
53
-
54
- ### RN` 0.50.x ` 版本
55
-
56
- 按照[ react-navigation] ( https://reactnavigation.org/ ) 的[ 安装文档] ( https://reactnavigation.org/docs/getting-started/#installation ) 操作,将所有[ react-navigation] ( https://reactnavigation.org/ ) 所需依赖安装到 RN 工程本地。
57
-
58
- ** 一定要逐一查看这些依赖的 README 文档** ,因为:
59
-
60
- 1 . 需要根据 RN 版本安装对应依赖的版本,以[ react-native-gesture-handler] ( https://github.com/software-mansion/react-native-gesture-handler#react-native-support ) 为例,RN 0.57.2 及以上版本,需要安装` react-native-gesture-handler@1.1.x ` ,** 不能使用最新版** ;
61
- 2 . 有些[ react-navigation] ( https://reactnavigation.org/ ) 的依赖使用 yarn/npm 安装完成,还需要** 手动链接** 原生 iOS 和 Android 代码,可以按照这些依赖的 README 文档操作。
50
+ 每次添加原生依赖后,都需要执行:` yarn ios ` 和` yarn android ` 重新编译和启动 iOS 和 Android 工程。
62
51
63
52
## 扩展配置
64
53
65
54
以下是安装** umi-preset-react-navigation** 后,扩展的 umi [ 配置] ( https://umijs.org/zh-CN/docs/config ) :
66
55
67
56
### reactNavigation
68
57
69
- 全都是选填参数 ,下面示例中填入的是默认值,等价于不填:
58
+ ` theme ` 字段选填 ,下面示例中填入的是默认值,等价于不填:
70
59
71
60
``` javascript
72
61
// .umirc.js
73
62
export default {
74
63
reactNavigation: {
75
- // 使用 ant-design 默认配色作为 Navigation 的默认主题
64
+ // 使用 ant-design 默认配色作为导航条的默认主题
76
65
theme: {
77
66
dark: false ,
78
67
colors: {
@@ -83,18 +72,10 @@ export default {
83
72
border: ' #dddddd' ,
84
73
},
85
74
},
86
- type: ' stack' , // Navigator 类型
87
- enableSafeAreasSupport: true , // 默认启用对 iOS Safe Areas 的适配/支持
88
75
},
89
76
};
90
77
```
91
78
92
- | 变量名 | 类型 | 说明 | 默认值 |
93
- | :--------------------- | :------ | :----------------------------------------------------- | ---------------------: |
94
- | type | enum | 导航类型,可选值:` 'stack' ` , ` drawer ` , ` bottom-tabs ` 。 | 'stack' |
95
- | enableSafeAreasSupport | boolean | 是否适配 iOS Safe Areas。 | true |
96
- | theme | object | 初始主题,将来考虑支持运行时切换主题/皮肤。 | _ 上面代码示例中所填值_ |
97
-
98
79
## 扩展运行时配置
99
80
100
81
查看 umi 文档,了解什么是:[ 运行时配置] ( https://umijs.org/zh-CN/docs/runtime-config ) 。
@@ -234,13 +215,34 @@ export default HomePage;
234
215
235
216
** 如果页面的` title ` 属性未设置,则使用` .umirc.js ` 中的全局[ title] ( https://umijs.org/config#title ) 。**
236
217
237
- ## 应用内部页面跳转
218
+ ## 页面间跳转
238
219
239
- ### 使用命令式
220
+ 查看 umi 文档: [ 页面间跳转 ] ( https://umijs.org/zh-CN/docs/navigate-between-pages ) ,姿势保持不变。
240
221
241
- ### 使用申明式
222
+ 使用** 声明式** 的` Link ` 组件时需要注意,在 RN 中 与 DOM 存在较大差异:
223
+
224
+ ``` jsx
225
+ import React from ' react' ;
226
+ import { Link } from ' umi' ;
227
+ import { List } from ' @ant-design/react-native' ;
228
+
229
+ const Item = List .Item ;
230
+
231
+ function Index () {
232
+ return (
233
+ < List>
234
+ < Link to= " /home" component= {Item} arrow= " horizontal" >
235
+ 主页
236
+ < / Link>
237
+ < Link to= " /login" component= {Item} arrow= " horizontal" >
238
+ 登录页
239
+ < / Link>
240
+ < / List>
241
+ );
242
+ }
243
+ ```
242
244
243
- ### 传递和接收参数
245
+ 使用 ** 命令式 ** 跳转页面时,只能使用 ` history ` 的 API, ** umi-preset-react-navigation ** 目前还不支持使用 [ react-navigation ] ( https://reactnavigation.org/ ) 提供的 ` navigation ` 来跳转,只能做导航条设置之类的操作。
244
246
245
247
## DeepLink
246
248
0 commit comments