revalidatePath
指定したpath以下のページを全てrevalidateする
revalidatePath('/product/[id]')と指定すると、
全ての/product/[id]とそれ以下のページがrevalidateされる
名前的には「revalidate」と言っているが、実際は「invalidate」にするだけ
しかもタイミングがちょっと特殊?
revalidatePath only invalidates the cache when the path is next visited. This means calling revalidatePath with a dynamic route segment will not immediately trigger many revalidations at once. The invalidation only happens when the path is next visited. ref これを読んだ感じだと、
今見ている画面が、/product/1であるときに、revalidatePath('/product/[id]')を呼ぶと、
このタイミングでは、/product/1のみがrevalidateされる
その後、/product/2に訪れた時に、元々あった/product/2がrevalidateされる
react-queryのイメージだと、
invalidateを呼んだ瞬間に全てがinvalidateになり、
再訪問した時に、普通にrefetchが行われる
となるはずだが、
revalidatePathはそもそもそのタイミングではinvalidateになってない
でもまあ、ユーザ目線では特に挙動の差異はないので問題ないかmrsekut.icon
無理やりやるとするなら、
/product/1にいる状態で、/product/2のデータを参照しようとしたりしたら問題が起こるか?
こんな意味不明なことをすることはまず無いと思うけど
あるとすれば、
/product/2で、2固有のデータをJotaiなどのatomに入れた状態で、
/product/1で、/product/[id]に対してrevalidateした時に、そのatomの内容が更新されない?
Route Handlers 経由で revalidateTag revalidatePath を呼び出した際は、該当のページに対して次回アクセスした際にキャッシュを最新化する動作になりますが、Server Actions の場合、今見ているページが即座に更新されているのが大きく違う点になりそうです。ref 後者のほうが自然