se2*_*2as 6 javascript reactjs next.js
我对编写 Next.js 应用程序感到困惑,当我有可重用的组件和<Link>s 导航到应用程序的其他区域时,该应用程序将在服务器端呈现页面。
文档说
getInitialProps(SSR)只为页面调用,不为组件调用”componentWillMount在不执行服务器端,它的客户端只渲染<Link> 标签只是客户端导航,因此它导航到的“页面”在客户端呈现我不清楚以下几点:
<Link>应用程序的其他页面有s,其他页面如何在服务器上呈现?<Link>s 是客户端,这当然意味着只有初始页面会在服务器端呈现,那么用 Nextjs 而不是普通的 React 编写应用程序有什么意义呢?getInitialProps只为页面调用,当然这意味着页面getInitialProps必须为在其页面上呈现的任何数据执行所有服务器调用,然后发送到子组件,这肯定非常慢。如果一个页面包含一个项目列表,将会有一个服务器调用来获取项目列表,对于列表中的每个项目,需要一个调用来获取项目详细信息,另一个调用来获取项目图片。这是在呈现页面之前的大量服务器调用。我认为用我想要做的事情的示例应用程序来说明我的问题会更容易。
这是我的应用程序的图形表示。
所有页面都使用layout-template添加页眉和页脚的主要结构,然后使用组件在页面中间添加自己的内容
|- pages
|- index.js (i.e. tab-1)
|- tab2.js
|- tab3.js
|- tab4.js
|- aitem
|- [id].js
|- numitem
|- [id].js
|- Components
|- layout-template.js --- needs data to pass to header/footer
|- header.js
|- footer.js
|- AlphabetList --- needs data
|- AlphabetListItem --- needs data
Run Code Online (Sandbox Code Playgroud)
下面是我的组件示例,展示了它们如何组成我的应用程序。请参阅他们必须从服务器获取数据的一些组件。
由于它们是组件,因此它们在 中获取数据componentWillMount,这意味着该组件不会呈现服务器端。因此这似乎完全违背了编写 Next.js 的初衷。
Component = layout_template.js 需要从服务器获取数据传递给页眉和页脚Component = header.js 只包含 JSXPage = Index.js (URL= "/" or "/index") 不从服务器获取任何数据,只指定 JSXComponent = AlphabetList.js 从服务器获取字母项目列表并使用另一个组件呈现它Component = AlphabetListItem.js从服务器获取项目的图像然后呈现它。单击此组件后,应用程序将转到项目的详细信息页面Page = AlphabetItemDetails.js ( URL = "aitem/[id]") 从服务器获取有关该项目的附加信息并呈现该项目的填充详细信息getInitialProps在每个页面中获取徽标?即在 index.js、tab2.js、tab3.js、tab4.jsaitem/[id].js和numitem/[id].js? 这似乎与任何不复制代码而是引入可重用代码的体面代码设计背道而驰。getInitialProps?小智 2
首先,选项卡不必是新页面。选项卡可以是组件。
在主页(index.js)上,您可以将使用 getInitialProps 获取的数据传输到带有 prop 的组件。
您还可以通过 Layout 通过 prop 向 header 和 footer 等组件发送数据。对于页眉中的徽标,您可以在页面文件夹中创建 _app.js 并使用 getInitialProps 从此处提取数据,而不是在每个页面上再次提取数据。
欲了解更多详细信息,您可以访问此页面https://nextjs.org/docs/getting-started
| 归档时间: |
|
| 查看次数: |
2554 次 |
| 最近记录: |