没有 @Entry 的页面是作为子组件被嵌入使用的,而不是通过路由跳转的。
两种页面跳转方式对比
方式一:路由跳转(需要 @Entry)
// 带 @Entry 的独立页面@Entry@Componentexport struct StudyEntryPage { build() { // 完整页面 }}// 通过路由跳转router.pushUrl({ url: 'pages/StudyEntryPage' });
方式二:组件嵌入(不需要 @Entry)
// 没有 @Entry,只是普通组件@Componentexport struct StudyPage { @Prop initialMode: 'study' | 'review' = 'study'; build() { // 组件内容 }}// 在父页面中直接使用@Componentexport struct ParentPage { @State showStudy: boolean = false; build() { if (this.showStudy) { // 直接作为组件嵌入,通过 @Prop 传参 StudyPage({ initialMode: 'study', onFinishRound: () => { this.showStudy = false; } }) } }}
📋 总结对比
| 方式 | 优点 | 缺点 | 需要 @Entry |
|---|
| 组件嵌入 | 传参简单、无需路由配置 | 页面切换无动画、状态管理复杂 | ❌ 不需要 |
| 路由跳转 | 页面独立、有系统动画 | 参数传递复杂、返回栈管理 | ✅ 需要 |
| 混合方式 | 灵活、可自定义过渡 | 结构稍复杂 | 顶层需要 |
页面没有 @Entry 却能使用,是因为它被嵌入在某个父组件中,通过 @Prop 传参控制,而不是通过路由跳转。