Next.js 按需静态再生

ΔO *_*ro' 9 javascript next.js vercel

我非常喜欢 Next.js 的增量静态再生

但是,我正在寻找一种根据需要强制重新生成静态页面的方法。理想情况下,通过一个命令,当我的源数据库中的数据发生变化时,我可以通过 API 调用触发该命令。

这个想法是在每次数据更改后只重新生成每个页面一次。我可以通过在重新验证间隔后获取目标页面来强制执行 ISR 页面的重新生成,但我正在寻找一种方法在数据更改之前冗余地重新生成它们

任何想法是否可行以及如何?:-)

Nic*_*ani 15

编辑
Next.js 12.1 现在支持按需 ISR(测试版)

目前(Next.js 10.1.3)没有对此功能的本机支持,触发页面重新验证的唯一方法是使用基于间隔的 HTTP 请求。
然而,Next.js 团队正在探索按需(通过 API 路由触发)重新验证(另请参阅https://github.com/vercel/next.js/discussions/10721#discussioncomment-686),因为这是一个强烈要求的功能将来可能会出现。
在这里,您可以找到按需重新验证页面的尝试,但它有严重的警告,并且尚未准备好投入生产。

来源:通过事件超级增量静态再生
更新静态页面

  • 嘿!来自维塞尔的李在这里。如果您想尝试此功能,请向我发送电子邮件至 vercel.com 的 lee :) (4认同)
  • @leerob 这个功能何时会广泛使用,是否有一些预计时间? (2认同)

小智 3

On Demand ISR(更新内容而不重新部署)现在在 Next.js 12.2 版本On-Demand ISR(稳定)中稳定

此功能允许您在构建时间后创建和更新静态页面到每页面级别,而无需删除整个页面进行重建。这对于动态内容非常有用,例如具有无头 CMS 的博客网站。

这是我在 Next.js 12.2 文档中找到的当前实现:

// pages/api/revalidate.js

export default async function handler(req, res) {
  // Check for secret to confirm this is a valid request
  if (req.query.secret !== process.env.MY_SECRET_TOKEN) {
    return res.status(401).json({ message: 'Invalid token' });
  }

  try {
    await res.revalidate('/path-to-revalidate');
    return res.json({ revalidated: true });
  } catch (err) {
    // If there was an error, Next.js will continue
    // to show the last successfully generated page
    return res.status(500).send('Error revalidating');
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个现场演示,您可以在其中使用此功能:On Demand ISR Demo

我发现 YouTube 上有用的一些视频链接。

Next.js 12.1:引入按需增量静态再生

Next.js 按需 ISR // 完整教程