【发布时间】:2020-06-27 17:12:57
【问题描述】:
由于我想将 SSR 添加到我即将进行的项目中以改进 SEO,因此我想尝试下一个。我想要的是只对初始页面使用 SSR,站点中的其余导航将是客户端渲染。我认为 getInitialProps 最适合这种情况,相应的文档。
据我了解,getInitialProps 在服务器中运行以进行初始页面渲染,并在使用 next/link 导航时在浏览器中运行。我发现的问题是 getInitialProps 似乎阻止了页面渲染。 (即 getInitialProps 完成后页面更改/渲染)
import axios from 'axios'
function Posts(props) {
return (
<div>
<div>Posts:</div>
<div>
{JSON.stringify(props)}
</div>
</div>
)
}
Posts.getInitialProps = async (context) => {
const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
// Wait longer to see the effect
// await (new Promise((resolve) => {
// setTimeout(resolve, 5000)
// }))
return {
props: {
posts: response.data
}
}
}
export default Posts;
我怎样才能像纯 React 一样,先渲染 jsx,然后填写 props?(执行 JSON.stringify(props) 可能一开始会被忽略)
此外,在接下来的 9.3 中,团队引入了 getServerSideProps,推荐使用它而不是 getInitialProps。当它们与 getServerSideProps 在服务器上运行的不同时,它们如何具有可比性?
【问题讨论】:
-
getInitialProps的结果作为 props 传递给页面组件。所以next需要等待getInitialProps解析才能渲染。这就是你所说的“阻止”吗?如果您想使用虚拟数据或其他内容进行初始渲染,则只需进行正常的反应数据获取(例如 useEffect)。 -
是的,我的意思是阻止。我不能做 csr,因为如果这个页面是初始页面,我需要 ssr。我的想法是否有效?
-
你能解决这个问题吗?我面临着类似的问题。
-
@Vishu 抱歉回复晚了,我离开了下一个。我记得,这不是我所期望的。我相信社区中的某个人会帮助你度过难关。祝你好运。
标签: javascript seo next.js