改版时如何处理 blocks 和 components
ShipAny Next 的 block 读取文案并传给 component,component 渲染传入的 props。
2026年5月28日
ShipAny 团队
ShipAny Next 按文案的读取方式区分 block 和 component:
读取翻译文案的文件是 block,所有内容都通过 props 传入的文件是 component。
按产品重写 block
Block 放在 src/blocks/,包含 <Hero />、<Pricing /> 和 <Footer /> 等页面区块。每个 block 读取 i18n 文案,组装内容配置,再传给 component。它们是演示素材。开始项目时,用产品内容替换这些区块。
// src/blocks/header.tsx — block:读 i18n,装配 component
export async function Header() {
const t = await getTranslations('landing');
const navLinks = [{ href: '/#features', label: t('nav.features') }];
return <SiteHeader navLinks={navLinks} />;
}
复用 component
SiteHeader、PricingTable 和 AppSidebar 等 component 放在 src/components/。它们通过 props 接收内容,不读取翻译。它们不知道你的应用叫什么、文案是什么、语言是什么,改版时可以继续使用这些组件。
为什么这个切分重要
当你改版或基于模板开新项目时:
- 保留
src/components/*中的可复用组件。 - 重写
src/blocks/*,传入产品文案。 - 重写供 block 使用的翻译 JSON 文件。
page.tsx 等页面文件组合多个 block。修改落地页时,编辑区块和翻译文件。区块与组件分开后,可以修改页面内容,复用已有组件。