@@ -3,26 +3,32 @@ title: Garfish.loadApp
3
3
slug : /api/loadApp
4
4
order : 4
5
5
---
6
- import Highlight from '@site/src /components/Highlight';
7
6
7
+ import Highlight from '@site/src /components/Highlight';
8
8
9
9
用于手动挂载子应用,可动态控制子应用的渲染和销毁。
10
- > 通过 ` Garfish.run() ` API 注册的子应用会自动根据路由进行应激活子应用的匹配逻辑,属于路由驱动式的应用挂载和销毁模式。如果你的场景下希望手动控制应用的加载和销毁,你可以使用 ` Garfish.loadApp() ` 的方式加载应用,它是一种更加灵活的微前端应用加载模式。
10
+
11
+ > Garfish 支持路由驱动式的应用挂载和销毁模式,
12
+ > 如果你的应用配置了 ` activeWhen ` , Garfish 则将自动监听路由变化并在路由命中时加载对应的子应用。这种模式属于路由驱动式的应用加载模式。如果你希望手动控制应用的加载和销毁,我们提供了 ` Garfish.loadApp() ` API 以供用户手动加载和销毁应用,这是一种更加灵活的子应用加载模式。
11
13
12
14
::: info
15
+
13
16
1 . 基于路由匹配的应用加载模式会通过子应用的 ` activeWhen ` 参数在在路由变化后自动判断当前应加载的子应用;
14
17
2 . 在手动加载模式下(Garfish.loadApp),Garfish 不会根据路径匹配而是完全由开发者控制应用加载和销毁,此时应用加载不会受到 ` activeWhen ` 参数的影响;
15
- :::
18
+ :::
16
19
17
20
## 类型
21
+
18
22
``` ts
19
23
loadApp (appName : string , options ?: Omit < interfaces .AppInfo , ' name' > ): Promise < interfaces .App | null > ;
20
24
```
21
25
22
26
## 默认值
27
+
23
28
- 无
24
29
25
30
## 示例
31
+
26
32
import Tabs from '@theme/Tabs ';
27
33
import TabItem from '@theme/TabItem ';
28
34
@@ -106,25 +112,29 @@ export default App = () => {
106
112
</TabItem>
107
113
</Tabs> -->
108
114
109
-
110
115
## 参数
116
+
111
117
### name
112
- - Type: <Highlight > string </Highlight >
113
- - 要加载的子应用名称,必选。
114
- - 各子应用的名称应保持唯一,这是子应用的唯一标识;
118
+
119
+ - Type: <Highlight > string </Highlight >
120
+ - 要加载的子应用名称,必选。
121
+ - 各子应用的名称应保持唯一,这是子应用的唯一标识;
115
122
116
123
::: tip
124
+
117
125
1 . 请确保当前要加载的子应用信息已注册。Garfish 会从已注册的 app 信息中查找同名 app,若应用信息未注册将导致应用加载失败。
118
126
2 . 应用信息注册可通过 ` Garfish.run() ` 、` Garfish.registerApp() ` 、` Garfish.setOptions() ` 三种方式注册;
119
- :::
127
+ :::
120
128
121
129
### options?
130
+
122
131
- Type: <Highlight > Omit <interfaces.AppInfo, 'name'> </Highlight >
123
132
124
133
- ` options ` 参数含义本质上与 [ registerApp] ( /api/registerApp#参数 ) 中同名参数保持一致,可选。
125
134
- 可移步 [ registerApp] ( /api/registerApp#参数 ) 查看具体参数说明;这里仅针对注意事项进行说明。
126
135
127
136
::: info
137
+
128
138
> ` options ` 的作用?
129
139
130
140
这里提供 ` options ` 是允许用户在手动加载 App 时自定义当前应用的信息参数,若之前已注册过子应用,则会将已配置信息和这里的 ` options ` 参数进行 deepMerge,提供用户运行时更新 App 应用信息参数的能力;
@@ -141,62 +151,68 @@ export default App = () => {
141
151
## 返回值
142
152
143
153
``` ts
144
- import Garfish from " garfish" ;
145
- import type { interfaces } from " garfish" ;
154
+ import Garfish from ' garfish' ;
155
+ import type { interfaces } from ' garfish' ;
146
156
147
157
let app: interfaces .App ;
148
158
app = await Garfish .loadApp (' vue-app' , {
149
- cache: true ,
150
- basename ,
151
- domGetter: ' #container' ,
152
- entry: ' http://localhost:8092' ,
159
+ cache: true ,
160
+ basename ,
161
+ domGetter: ' #container' ,
162
+ entry: ' http://localhost:8092' ,
153
163
});
154
164
```
165
+
155
166
> loadApp 的返回值为子应用的 App 实例对象,实例对象上存在一些方法和属性,提供给开发者用于手动进行 App 的挂载、销毁及判断 App 当前应用状态等信息;
156
167
157
168
### 实例属性
158
- - <Highlight > name: string </Highlight >
159
169
160
- 应用名称,string。
170
+ - <Highlight > name: string </Highlight >
171
+
172
+ 应用名称,string。
161
173
162
- - <Highlight > mounted: boolean </Highlight >
174
+ - <Highlight > mounted: boolean </Highlight >
163
175
164
- 应用是否已挂载,boolean。 ` true ` 表示已挂载,` false ` 表示未挂载。
176
+ 应用是否已挂载,boolean。 ` true ` 表示已挂载,` false ` 表示未挂载。
165
177
166
- - <Highlight > display: boolean </Highlight >
178
+ - <Highlight > display: boolean </Highlight >
167
179
168
- 应用是否被隐藏,boolean。 ` true ` 表示显示状态,未隐藏,` false ` 表示隐藏态。
180
+ 应用是否被隐藏,boolean。 ` true ` 表示显示状态,未隐藏,` false ` 表示隐藏态。
169
181
170
- - <Highlight > strictIsolation: boolean </Highlight >
182
+ - <Highlight > strictIsolation: boolean </Highlight >
171
183
172
- 是否开启严格隔离。` true ` 表示已开启,` false ` 表示未开启。
184
+ 是否开启严格隔离。` true ` 表示已开启,` false ` 表示未开启。
173
185
174
- - <Highlight > isHtmlMode: boolean </Highlight >
186
+ - <Highlight > isHtmlMode: boolean </Highlight >
175
187
176
- 是否是 ` html ` 入口模式。
188
+ 是否是 ` html ` 入口模式。
177
189
178
- - <Highlight > appContainer: HTMLElement </Highlight >
190
+ - <Highlight > appContainer: HTMLElement </Highlight >
179
191
180
- 应用容器
192
+ 应用容器
181
193
182
- - <Highlight > appInfo: AppInfo </Highlight >
194
+ - <Highlight > appInfo: AppInfo </Highlight >
183
195
184
- 应用配置信息
196
+ 应用配置信息
185
197
186
- - <Highlight > hooks: interfaces.AppHooks </Highlight >
198
+ - <Highlight > hooks: interfaces.AppHooks </Highlight >
187
199
应用生命周期钩子函数
188
200
189
201
### 实例方法
190
202
191
203
- app.mount()
204
+
192
205
- Type
206
+
193
207
``` ts
194
208
mount (): Promise < boolean >
195
209
```
210
+
196
211
- 示例
212
+
197
213
``` ts
198
- import Garfish from " garfish" ;
199
- import type { interfaces } from " garfish" ;
214
+ import Garfish from ' garfish' ;
215
+ import type { interfaces } from ' garfish' ;
200
216
201
217
const app = await Garfish .loadApp (' vue-app' , {
202
218
cache: true ,
@@ -206,6 +222,7 @@ app = await Garfish.loadApp('vue-app', {
206
222
});
207
223
await app .mount ();
208
224
```
225
+
209
226
- 触发子应用的 <Highlight > 渲染</Highlight > 流程。若应用<span style={{color: '#9b67f6'}}> 已挂载 </span >、或<span style={{color: '#9b67f6'}}> 正在挂载中 </span >、或<span style={{color: '#9b67f6'}}> 正在卸载中 </span >将不会触发渲染流程;
210
227
- 在子应用渲染前将会触发 ` beforeMount ` 钩子函数,渲染完成将触发 ` afterMount ` 钩子函数并将当前挂载的应用 push 进 ` Garfish.activeApps ` 。若渲染过程中出现异常将触发 ` errorMountApp ` 钩子函数;
211
228
- 在此过程中将执行 ` provider ` 提供的子应用 ` render ` 函数,若 ` provider ` 函数未找到将会抛出错误。[ 尝试解决] ( /issues/#provider-is-null )
@@ -216,25 +233,31 @@ app = await Garfish.loadApp('vue-app', {
216
233
:::
217
234
218
235
- app.unmount()
236
+
219
237
``` ts
220
238
unmount (): boolean ;
221
239
```
240
+
222
241
- 触发子应用的 <Highlight > 销毁</Highlight > 流程。若应用<span style={{color: '#9b67f6'}}> 正在卸载中 </span >,将不会重复卸载;
223
242
- 在子应用渲染前将会触发 ` beforeUnmount ` 钩子函数,渲染完成将触发 ` afterUnmount ` ,若销毁过程中出现异常将触发 ` errorUnmountApp ` 钩子函数;
224
243
- 应用卸载过程中会执行 ` provider ` 内部提供的 ` destroy ` 函数。卸载完成后,子应用的渲染容器将被移除、子应用的执行上下文也将被销毁,渲染过程中产生的副作用也都将会被清除,同时将子应用从
225
- ` Garfish.activeApps ` 里移除,` mounted ` 和 ` display ` 状态置为 false;
244
+ ` Garfish.activeApps ` 里移除,` mounted ` 和 ` display ` 状态置为 false;
226
245
- [ unmount 过程中都做了哪些事情] ( /guide/lifecycle#unmount )
227
246
228
247
- app.show()
248
+
229
249
- Type
250
+
230
251
``` ts
231
252
show (): Promise < boolean >
232
253
```
254
+
233
255
- 触发子应用的 <Highlight > 显示</Highlight > 流程;
234
256
- 示例
257
+
235
258
``` ts
236
- import Garfish from " garfish" ;
237
- import type { interfaces } from " garfish" ;
259
+ import Garfish from ' garfish' ;
260
+ import type { interfaces } from ' garfish' ;
238
261
239
262
const app = await Garfish .loadApp (' vue-app' , {
240
263
cache: true ,
@@ -245,23 +268,28 @@ app = await Garfish.loadApp('vue-app', {
245
268
// 若已经渲染触发 show,只有首次渲染触发 mount,后面渲染都可以触发 show 提供性能
246
269
app .mounted ? app .show () : await app .mount ();
247
270
```
271
+
248
272
- 触发子应用的 < Highlight > 显示< / Highlight > 流程。若应用< span style = {{color : ' #9b67f6' }}> 已显示 < / span > 、或< span style = {{color : ' #9b67f6' }}> 未挂载 < / span > 将不会触发应用渲染流程;
249
273
250
274
- 在子应用显示前将会触发 ` beforeMount ` 钩子函数,显示完成将触发 ` afterMount ` 钩子函数并将当前挂载的应用 push 进 ` Garfish.activeApps ` ;
251
275
- 在此过程中将执行 ` provider ` 提供的子应用 render 函数,若 ` provider ` 函数未找到将会抛出错误。[尝试解决](/ issues/ #provider - is - null )
252
276
- [show 过程中都做了哪些事情](/ guide / lifecycle #show )
253
277
254
278
:::info 请注意:
279
+
255
280
1. ` app.show() ` 用于触发子应用的显示流程,此过程并不是 css 中样式的显示或隐藏,show () 方法会触发子应用的 ` render ` 函数,若 ` render ` 函数中存在副作用也会再次执行;
256
281
2. ` app.show() ` 在应用渲染的过程中将会执行 ` provider ` 中提供的 ` render ` 函数,但与 ` app.mount() ` 不同的是,` app.show() ` 不会创建新的执行上下文;
257
282
3. 在基于路由驱动子应用加载模式下,若已启用缓存(` cache: true ` ),则会默认使用 show () 触发子应用的渲染。若未开启缓存模式,则会使用 ` app.mount() ` 渲染子应用。非路由驱动模式下,由开发者控制子应用的渲染和销毁;
258
- :::
283
+ :::
259
284
260
285
- app .hide ()
286
+
261
287
- Type
288
+
262
289
` ` ` ts
263
290
hide(): boolean;
264
291
` ` `
292
+
265
293
- 触发子应用的 < Highlight > 隐藏< / Highlight > 流程。若应用< span style = {{color : ' #9b67f6' }}> 未显示 < / span > 、或< span style = {{color : ' #9b67f6' }}> 未挂载 < / span > 将不会触发应用隐藏流程;
266
294
267
295
- 在子应用隐藏前将会触发 ` beforeUnmount ` 钩子函数,隐藏完成将触发 ` afterUnmount ` 钩子函数并将当前隐藏的应用从 ` Garfish.activeApps ` 中移除;
0 commit comments