javascript - NextJS 中的 CMS 驱动组件
问题描述
目前有一个包含多个页面的 NextJS 站点。每个页面可以具有任意顺序的多个组件。这些组件由最终用户选择的 CMS 驱动。
例如,他们可以有一个轮播,然后是一个网格,然后是段落组件。
每个页面我都会获得初始道具,其中将包含该页面的组件列表以及每个组件的数据。
Page1.getInitialProps = async () => {
const res = await fetch('some api')
const json = await res.json()
return { data: json }
}
这最终到达顶级父组件,该组件查看数据并使用 switch 语句在页面上呈现适当的子组件
renderWidgets = (data) => {
const pageWidgets = data.widgets.map((widget) => {
switch(widget.type) {
case WIDGETS.CAROUSEL:
return <Carousel />;
case WIDGETS.GRID:
return <Grid />;
case WIDGETS.PARAGRAPH:
return <Paragraph />;
default:
return <div />;
}
});
return pageWidgets;
}
render() {
return (
<div className="layout__main">
{this.renderWidgets()}
</div>
);
}
我的问题是是否有更好的方法来处理这个渲染组件过程。每次创建一个全新的小部件时,我都必须确保更新 switch 语句。有没有更好的方法在页面上呈现动态 CMS 驱动的组件?
解决方案
推荐阅读
- jquery - 如何通过获取 div 父类而不是输入来触发
- intellij-idea - 我可以将外部 jar 添加到 IntelliJ 和/或 Eclipse 中的每个项目中吗?
- html - 你能在 html 中只弯曲或环绕盒子的顶角吗?
- sql - 如何(预加载)在自定义列上连接表?
- postgresql - 将 MainTable 中的新数据附加到数据库中的现有表中
- windows - 如何在 Windows 命令提示符中设置具有多行文件内容的环境变量
- node.js - 如何告诉猫鼬在特定时间后自动增加存储值?
- python - 尝试接收在不同命令中创建的特定通道内的所有消息
- scala - 有没有办法在 Scala 中动态添加约束?
- php - Wordpress - 在 facebook 上共享页面链接时,如何选择预览图像/视频