Next.js 动态生成路由的最佳实践

Next.js 是一个基于 React 的 SSR 框架,提供了非常便捷的构建服务端渲染应用的方法,其中之一就是动态生成路由。在这篇文章中,我们将探讨 Next.js 动态生成路由的最佳实践。

为什么使用动态路由

动态路由,顾名思义,是在运行时生成路由。动态路由在实际应用中用途广泛,例如:

  • 个性化页面的生成,例如用户页面
  • 自动生成静态页面
  • 搜索引擎爬虫优化,让爬虫更加友好地抓取页面
  • 等等

相比于静态路由,在动态路由方案下,我们可以避免手动维护每一个路由,特别是在大型项目中这是相当困难的,也能够更快速地开发我们所需要的功能。

动态路由实现

在 Next.js 中,实现动态路由可以使用一个叫做 getStaticProps 的方法。getStaticProps 是 Next.js 提供的一个异步方法,主要用来异步获取组件所需要的数据,这个数据包括组件的 props。

我们可以通过 getStaticProps 中的 database/API 去获取数据,并通过 return 的方式将数据传递到该页面。这样在页面中我们就可以使用这些数据了。这里有一个简单的示例:

这个例子中,我们动态地创建了 10 个路由,每个路由都是 /posts/:idid 是从 0 到 9。在 getStaticPaths 方法中,我们生成了这 10 个路径,然后通过 getStaticProps 提供的上下文中的参数 params,去从远程 API 加载数据,最后将这些数据解析为一个 postData 对象,通过 props 传递到了 Post 组件中,并使用它来进行渲染。

动态路由的最佳实践

要实现优秀的动态路由,需要遵守一些最佳实践。

1. 使用静态生成模式 (Static Generation)

使用静态生成模式可以增加性能,加快页面展示速度。静态生成模式就是在构建应用时生成静态 HTML 文件。一旦构建完成,路由就变得非常快速并且具有可缓存性。这个模式's fallback 是 true' 。添加fallback值来实现可选的启用。如果设置为 false,则与SSR模式等效,并对所有可能的参数对使用SSR来渲染页面。而如果开启这个值,那么在获得预先生成的页面之前,我们将看到一个加载器。

2. 不要在同一页面上实现多个动态路由

这不仅会混淆代码,还会破坏应用程序的可维护性,并以丑陋的方式显示路由。相反,为每个唯一的路由创建单独的组件,这将使代码的可读性更强。我们应该遵循单一职责原则,保持每个页面的聚焦点。

3. 静态路由生成时间

因为在构建时静态页面被生成了,而每一个动态路由对应的静态文件都会在构建时生成。当路由的数量非常大的时候,这个时间也是巨大的,所以我们应该在这种情况下进行微小的调整。

我们可以使用依赖构建和增量构建功能。依赖构建意味着只有在您的代码中生成的页面上进行了更改时,Next.js 才会重新生成页面,这意味着更快的构建时间。增量构建会查找文件的更改并仅重新生成更改了的路由。这将进一步加快构建时间。

4. 缓存变化不频繁的静态路由

在一个 Next.js 应用程序中,在特定时间只存在一个页面的单个版本。为了缓存不经常更改的静态路由,我们可以使用缓存较高的max-age的请求头,这样就会不再去重新下载该路由页面。在更新该静态路由时,会在下一次请求该路由时进行更新。

revalidate 是新的方法,用于设置多久页面应在客户端缓存后重新验证。可以使用数字或任意间隔字符串来设置缓存时间。如果我们通过 next/link 导航到缓存的路由,Next.js 将从缓存中快速恢复。

总结

动态路由是 Next.js 极其强大的特性之一,我们可以在运行时生成路由,避免手动维护每一个路由,提高应用程序的可维护性和开发效率。本文分享了 Next.js 中动态路由的实现和一些最佳实践,希望您能在工作中充分利用它们。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6542f4dc7d4982a6ebc9b995


纠错
反馈