【发布时间】:2020-09-08 21:51:09
【问题描述】:
我正在看一个 nextjs 教程,导师做了一些事情,打破了我在学校学到的东西,让我陷入了思考。
他这样做了:
interface FaqProps {
faq: FaqModel[];
}
export default function Faq({ faq }: FaqProps) {
return (
<div>
{faq.map((f) => (
<ExpansionPanel key={f.id}>
<ExpansionPanelSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1a-content"
id="panel1a-header"
>
<Typography>{f.question}</Typography>
</ExpansionPanelSummary>
<ExpansionPanelDetails>
<Typography>{f.answer}</Typography>
</ExpansionPanelDetails>
</ExpansionPanel>
))}
</div>
);
}
export const getStaticProps: GetStaticProps = async () => {
const db = await openDB();
const faq = await db.all("SELECT * FROM FAQ ORDER BY createDate DESC");
return { props: { faq } };
};
我的理解是,因为常见问题永远不会改变,我可以在构建时加载它们,调用getStaticProps。因为getStaticProps 只发生在我可以调用的服务器中
直接进入数据库。
那么,可以这样做而不是对服务器进行 fetch 调用吗? 这里的模式不是被打破了吗? 这是 Web 开发的方向还是只是这个人所做的事情?
【问题讨论】:
-
是的,我知道可以做到。我只是想知道这样做是否是一个好习惯
-
这样做很好。这是 Next.js 的一个特性,如果这样做是不好的做法,那么 Vercel 甚至不会在文档中提及它,或者至少会提出一个你不应该的免责声明。
标签: javascript reactjs next.js