javascript - NextJS 从服务器端调用执行代码客户端
问题描述
我目前getStaticProps
用于在构建时获取服务器端数据,并将其传递给我的页面组件。我从页面组件文件中进行了以下调用:
const getStaticProps: GetStaticProps = async (context) => {
const page = await fetchPage({
preview: context.preview,
slug: context.params.slug.toString(),
});
return { props: { page: stringify(page) } };
};
这(由 验证console.log(typeof window)
)在服务器端正确执行。同样,fetchPage
调用是服务器端的。
const fetchPage = async ({
preview,
id,
slug,
}: FetchEntryOptions): Promise<Entry<Contentful.IPageFields>> => {
const contentfulClient = preview
? contentfulPreviewApiClient
: contentfulDeliveryApiClient;
let page: Entry<Contentful.IPageFields>;
if (id) {
page = await contentfulClient.getEntry(id);
} else {
const pageCollection: EntryCollection<Contentful.IPageFields> = await contentfulClient.getE ntries(
{
content_type: "page",
"fields.slug": slug,
}
);
page = pageCollection.items?.[0];
}
return page;
};
但是,contentfulPreviewApiClient
和contentfulDeliveryApiClient
都是初始化的客户端。
完整的代码库在这里
解决方案
奇怪的怪癖:声明一个常量getStaticProps
函数,然后用语法导出它export {getStaticProps}
会导致这种情况,而语法export const getStaticProps = ...
不会。不知道为什么。
推荐阅读
- c - 从文件插入到链表 C
- html - 如何使用计数器更改 div 值
- python - Python:将Unicode字符转换为相应的Unicode字符串
- express - 如何让geojson与ejs一起工作并在vega-lite可视化中表达
- android - 如何在应用程序最小化时暂停/停止收集/发送流中的数据?
- opencv - 将 Pose-estimator algorithm - 应用于图像识别算法的边界框的输出
- gtk - 如何使用 Python+PyGObject 的 GObject.bind_property 函数进行 2 路数据绑定?
- html - 如何将链接放置在文本的右侧?
- ansible - Ansible - 在远程主机上复制多个文件
- java - 重复从Java中的arraylist中选择和删除一个随机条目