revalidateTag 思路很好——给 fetch 打 tag,写完数据后按 tag 失效。但用了一年发现有挺多坑。
最坑的是 tag 是全局的,不同路由用了同名 tag 会一起失效。后来约定 tag 带命名空间,比如 posts:list、posts:detail:${id}。
fetch(url, { next: { tags: [`posts:detail:${id}`] } });
revalidateTag(`posts:detail:${id}`);
另一个坑是 on-demand revalidate 在自托管下要走 /api/revalidate endpoint,部署时别忘开。
大家 revalidateTag 是细粒度还是粗粒度?