Naive UI的Pagination切换页码后数据没更新怎么办?
用Naive UI的Pagination组件做分页,切换页码时数据没变化,页面还是第一页的内容。
在Vue组件里绑定了page变量,通过@update:page="fetchData"监听事件,调接口时传了当前页码参数,但切换到第二页后控制台没有看到新的请求。
代码结构大概是这样的:
<n-pagination
v-model:page="currentPage"
:page-count="totalPages"
@update:page="fetchData"
/>
尝试在fetchData里打印了currentPage,发现变量确实在变化,但后端返回的数据始终是第一页。总页数是根据接口返回的总条数算出来的,这部分没问题。
改
fetchData方法,确保传的是currentPage,像这样:如果
currentPage是响应式对象,记得加.value。就这样。解决办法很简单,别走弯路,在调用fetchData的时候,直接把新的页码作为参数传进去,而不是依赖currentPage的值。你可以这样改:
:page-count="totalPages"
@update:page="fetchData"
/>
然后在你的方法里:
fetchData(newPage) {
console.log(newPage) // 这里就能拿到最新的页码
// 调接口传newPage就行了
}
这样就不用依赖可能还没更新的响应式变量了。
还有一个可能的原因是:你可能在created或者mounted里初始化数据的时候,没有把currentPage作为初始参数传进去,导致第一次请求和后续请求参数不一致。建议统一用同一个方法处理,比如在mounted里调一下fetchData(currentPage)
总之就是一句话:别在@update:page里依赖v-model绑定的变量,直接用事件传出来的参数最靠谱。