查看源不显示动态内容

IT技术 javascript reactjs next.js server-side-rendering
2021-05-11 14:49:42

我正在制作非常简单的下一个 js 应用程序,其中一切正常,但视图源除外。

我做出了一个Promise,并且在检索内容和加载这些内容之后出现延迟,如果我在 chrome 中查看源代码 (ctrl + u),我将无法在源代码中加载这些动态内容。

所以它可以在链接中重现,

步骤 1)只需点击代码和框链接:https ://3re10.sse.codesandbox.io

在此处输入图片说明

步骤 2)之后选择查看源代码 (ctrl + u),它会显示如下页面,

在此处输入图片说明

在这里,您可以清楚地看到没有包含文本的元素,My name is Jared而所有其他文本都应该在那里,但事实并非如此。

Loading...在页面加载时出现的页面源中只有文本可用。

整个应用程序工作代码可在此处获得:https : //codesandbox.io/s/nextjs-typescript-template-u8evx

请帮助我如何在 Next Js 应用程序中反映视图源中的所有动态内容。

我可以理解这是由于async 的行为..但我真的无法理解克服这个问题并在加载后显示动态内容的方法..请帮助我,我被这个问题困扰了很长时间..

非常感谢提前..

3个回答

您明确告诉 React 在客户端获取用户。

function Profile() {
  const { data, revalidate } = useSWR("/api/user", fetch);
}

如果您需要在服务器上预呈现用户信息,您可以使用以下功能之一来完成:

  • getStaticProps(静态生成):在构建获取数据
  • getServerSideProps(服务器端渲染):获取每个请求的数据

当您获取用户信息时,我假设每个请求都应该请求它,所以使用getServerSideProps.

const URL = 'api/user/'

export default function Profile({ initialData }) {
  const { data } = useSWR(URL, fetcher, { initialData })

  return (
    // render 
  )
}

export async function getServerSideProps() {
  const data = await fetcher(URL)
  return { props: { initialData: data } }
}

通过这种方式,您可以在服务器上获取用户信息,并在第一次渲染时将其提供给 React。此外,您将useSWR在客户端定期重新验证数据。

推荐阅读: 数据获取

如果您使用 nextjs,则必须运行 yarn buildyarn export 然后您将拥有带有导出静态内容的目录“out”。

因为现在你的例子是 CSR(客户端渲染)

其他答案已经很清楚地告诉您动态内容没有出现在源代码中的原因。

首先,有两种渲染:服务器端客户端

  • 服务器端/SSR是当您的服务器呈现您的应用程序然后将其发送到客户端(浏览器)时。

  • 客户端 / CSR是当您的应用程序到达浏览器时,它将再次呈现(但这次仅在您激活 SSR 时才呈现必要的内容,NextJS 具有默认设置)。

如果您希望您的动态内容出现在源代码中,您应该提到的那样服务器端调用您的 api @Nikolai KiselevNextJS 提供了函数getServerSideProps()(用于组件级别),如果开发人员想要在服务器端获取信息,可以使用该函数

如果你把你的 profile() 函数作为一个页面,你也可以使用getInitialProps()函数从服务器端获取你的 api。

请查看 NextJS 文档,他们提供了您需要的示例。