Next.js中客户端路由与服务端路由的区别与联系

阅读时长 4 分钟读完

引言

随着互联网技术的发展,前端框架也在不断升级。Next.js 是一款基于 React 的服务端渲染应用框架,它可以方便地开发出在服务器上渲染 React 应用并且实现了 HMR (Hot Module Replacement)和路由器功能。

在前端开发中,页面路由是必不可少的功能。而在 Next.js 中,有两种路由方式:客户端路由和服务端路由。本文将分析客户端路由和服务端路由的区别及其联系,并提供详细的示例代码。

客户端路由

客户端路由是指在浏览器端进行路由切换,在 Next.js 中,我们可以使用 Next.js 提供的 Link 组件来实现。在这种路由方式下,请求是从浏览器向服务器发送,后者返回 HTML。在与服务器交互后,客户端代码接管并挂接到 DOM 上。 随后,页面可以处理所有的路由事件,并显示对应内容。

下面是一个简单的客户端路由示例代码:

-- -------------------- ---- -------
-- --------------
------ ---- ---- ------------

----- ---- - -- -- -
  ------ -
    -----
      ----- --------------
        -----------
      -------
    ------
  --
--

------ ------- -----

上面的代码中,我们使用了 Link 组件实现了客户端路由。

服务端路由

服务端路由是指在服务器端进行路由切换。在 Next.js 中,我们可以利用 getServerSideProps()getStaticProps() 来实现服务端路由。根据服务器端返回的不同内容,页面可以处理所有路由事件并显示对应内容。

下面是一个简单的服务端路由示例代码:

-- -------------------- ---- -------
-- -------------
------ - --------- - ---- --------------

----- ------- - -- ------- -- -- -
  ----- ------ - ------------
  ------ -
    -----
      ------------------------
      ------------------------
      ------- ----------- -- --------------------------
    ------
  --
--

------ ----- -------- --------------------------- -
  ----- - -- - - --------------
  ----- --- - ----- ----------------------------------------------------------
  ----- ------- - ----- -----------
  ------ -
    ------ -
      --------
    --
  --
-

------ ------- --------

上面的代码中,我们通过 getServerSideProps() 方法来返回数据,并通过 [id].js 文件名来实现路由。在页面中,我们可以通过 useRouter 钩子返回的给定内容来实现路由切换。

区别与联系

客户端路由与服务端路由的区别在于路由切换的位置:一个在浏览器端,一个在服务器端。

当我们使用客户端路由时,每次路由切换都会向服务器发起新的请求,但在路由之间,页面间的切换都是无比流畅的。一般地,我们会在 Next.js 中使用客户端路由来切换不需要 SEO 的动态状态,如用户登录、页面滚动等操作。

相反,当我们使用服务端路由时,每次路由切换都会在服务器上生成新的 HTML 页面并将其发送到浏览器端。这种方式的好处在于,每个页面都可以被搜索引擎和社交媒体爬虫检索到,更容易被搜索。然而,由于需要在服务器端生成新的 HTML 页面,此方式会增加服务器的负担。

在某些需求场景中,我们需要使用两种方式一起应用,以达到更好的用户体验。例如,我们可以使用客户端路由来切换某些不需要 SEO 的基础页面,例如 /home/contact,而使用服务端路由来切换需要 SEO 的文章页面。

结论

Next.js 中客户端路由与服务端路由在实现方式及应用情境上有着明显的区别。开发者应根据自己的需求选择不同的路由方式。如果需要实现 SEO 或从服务器中取回某些特定数据,则应选择服务端路由。

本文提供了两种路由方式在 Next.js 中的详细示例代码,希望这对读者们能有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fb2a46447136260158062a

纠错
反馈