nextjs缓存 #
遇到了一个缓存问题。
有一个列表页面和一个新建页面,新增一条数据后会返回到列表页,但是列表页中不显示新数据,怎么刷新不显示。
查了一下好像nextjs的全路由缓存机制(full-route-cache)1,下面是列表也的代码。
|
|
先查到了用重新验证刷新缓存,revalidatePath方法,代码如下
|
|
但是用了之后不但没解决问题,反而出现了另一个问题——水合。不过我没有仔细研究这个问题,可能是因为服务端刷新了缓存,但是客户端缓存没刷新,两边对不上了导致的。
然后又加了 prefetch 解决了水合问题,但是缓存还是没刷新。
|
|
最后找到了动态渲染(dynamic-rendering)2,大概意思是当页面中有动态函数3时,页面就不是全路由缓存了,而是有效载荷和数据缓存。
在列表页加了读取 session 就好了,感觉应该是它内部使用了动态函数。
|
|
现在问题就解决了。
后续要研究一下这部分的原理。
- 缓存机制
- 水合
- 有效负载
-
全路由缓存 https://nextjs.org/docs/app/building-your-application/caching#full-route-cache ↩︎
-
动态渲染 https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering ↩︎
-
动态函数 https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-functions ↩︎