一个主实体 + 可拔插的 Component。Unity、Unreal、Vue 等都用类似思路:主模块容纳组件,按需挂载或卸载。
// main.jsx
function Main({ components = [] }) {
return (
<div className="main">
{components.map((Comp, i) => Comp && <Comp key={i} />)}
</div>
)
}
// component.jsx
function HealthBar() {
return <div className="health-bar">HP: 100</div>
}
function DragHandle() {
return <div className="drag-handle">⋮⋮</div>
}
import Main from './main.jsx'
import { HealthBar, DragHandle } from './component.jsx'
// 只挂拖拽
<Main components={[DragHandle]} />
// 挂两个
<Main components={[DragHandle, HealthBar]} />
// 不挂任何组件
<Main components={[]} />
插拔 = 改 components 数组即可。