javascript - 为什么我们在使用带有 Next.js 的 SSR 为客户端预渲染数据时需要 JSON.stringify(data)
问题描述
我试图理解为什么我们需要 JSON.stringify(data) 在使用getServerSideProps(context)
with时为客户端预渲染数据Next.js
。我还在阅读 react -query 文档(链接- 安全注意:使用 JSON.stringify 序列化数据会使您面临 XSS 漏洞的风险),使用 JSON.stringify() 不是最佳实践,因为它不是转义 HTML 标签,我们最好使用 serialize-javascript npm 包。关联
这是我所指的代码:
export async function getServerSideProps(context) {
// const { req, res } = context;
const { appToken } = nookies.get(context);
let isAdmin = false;
const categoryList = async () => {
const result = await listCategory();
// return JSON.stringify(result);
return serialize(result, { isJSON: true });
};
try {
const { email } = await admin.auth().verifyIdToken(appToken);
const { role } = await currentUser(email);
if (role === 'admin') isAdmin = true;
// Using Hydration
const queryClient = new QueryClient();
await queryClient.prefetchQuery('categoryList', categoryList);
return {
props: {
token: appToken,
isAdmin: isAdmin,
dehydratedState: dehydrate(queryClient),
},
};
} catch (error) {
console.log(error);
if (error) {
return {
// notFound: true,
redirect: {
destination: '/login',
permanent: false,
},
};
}
}
}
解决方案
推荐阅读
- javascript - 按单词拆分字符串并检测/包含换行符
- vb.net - 在导入的包中添加功能?
- python - 在python中使用simple_salesforce包提取Account时,出现如下与collections.OrderedDict', 'HY105'相关的错误)
- android - Android 上的实时电话通话字幕/转录(语音转文本)
- elasticsearch - 需要在我的 kibana 仪表板上创建一个导航栏,该导航栏链接到其他仪表板
- c# - MVVM场景中Model和ViewModel的枚举分离
- r - 似乎无法绘制三列
- javascript - 我应该使用 req.body.item 从发布请求中获取正文?
- javascript - 从 .json 文件中获取并解析多个数组
- bash - 如何在 zsh 中正确调用 compinit(和 bashcompinit)