主题
生命周期
可选文件:src/app.tsx / src/app.jsx。默认导出必须是 defineApp({...}) 的返回值。从 @vlian/app/runtime 导入,勿把 Node 配置注入浏览器。
tsx
import { defineApp, redirect } from '@vlian/app/runtime';
export default defineApp({
async bootstrap({ signal }) {
return { ready: true };
},
errorComponent: ({ error, reset }) => (
<main>
<p>{error.message}</p>
<button type="button" onClick={reset}>
重试
</button>
</main>
),
notFoundComponent: () => <main>未找到页面</main>,
async beforeNavigate({ location, bootstrap, signal }) {
// throw redirect({ to: '/login' })
},
});字段
| 字段 | 说明 |
|---|---|
bootstrap | 启动前异步初始化;成功只执行一次 |
errorComponent | 路由错误 UI |
notFoundComponent | 未匹配 UI |
beforeNavigate | 进入/停留调用;preload 不调用 |
顺序
挂载 → 加载 defineApp → bootstrap → Router 就绪 → 非 preload 导航执行 beforeNavigate → 渲染或错误页。
- 重定向:
throw redirect({ to }) - 取消:
signalabort,不落业务错误 UI - 连续 redirect 超过上限(
MAX_REDIRECT_CHAIN)失败