"use client"; /** * ParentPortalRemote - parent-portal MF Remote 接入组件 * * 职责(ARB-002 §2.3): * - NEXT_PUBLIC_MF_ENABLED=true:通过 Module Federation 动态加载 parent-portal Remote * - NEXT_PUBLIC_MF_ENABLED=false:展示"需启用微前端模式"提示 * - 使用 next/dynamic 懒加载(ssr: false,Remote 仅 CSR) * - ErrorBoundary 兜底:Remote 加载/渲染失败时降级展示 * * 维护者:ai13(teacher-portal) */ import dynamic from "next/dynamic"; import { ErrorBoundary } from "@edu/ui-components"; const MF_ENABLED = process.env.NEXT_PUBLIC_MF_ENABLED === "true"; /** 动态加载 parent-portal Remote(仅 CSR,加载失败返回降级组件) */ const ParentRemote = dynamic( () => import("parent/ParentApp") .then((mod) => mod.default) .catch(() => FallbackRemote), { ssr: false, loading: () => (

正在加载家长端视图…

), }, ); /** Remote 加载失败时的降级组件 */ function FallbackRemote(): React.ReactNode { return (

家长端视图加载失败

请确认 parent-portal 服务已启动(端口 4002)并已暴露 ParentApp

); } /** MF 未启用时的提示 */ function MfDisabledNotice(): React.ReactNode { return (

家长端视图需启用微前端模式

设置环境变量 NEXT_PUBLIC_MF_ENABLED=true 后重启服务, 并确保 parent-portal 已在 next.config.js remotes 中注册。

); } export default function ParentPortalRemote(): React.ReactNode { if (!MF_ENABLED) { return ; } return ( (

家长端视图渲染异常

{error.message}

)} >
); }