fix(题目列表): 切了几个知识点再按后退,地址回到了全部题目、页面还停在上一个知识点
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c3927d522c
commit
50660abf11
1 file changed
+23
-2
@@ -49,7 +49,14 @@ export function usePagination<T extends Record<string, any>>(
|
||||
// 同步其他查询参数
|
||||
Object.keys(initialQuery).forEach((key) => {
|
||||
const value = route.query[key]
|
||||
if (value !== undefined) {
|
||||
if (value === undefined) {
|
||||
// 地址里没有这一项(后退到不带筛选的地址、点顶栏回到列表)就是没筛,
|
||||
// 不能留着上一个地址的值:后退回 /problem 页面还停在上一个知识点。
|
||||
// 和 clearQuery 一样清成空值 —— initialQuery 是进页面时从地址读的,不一定是空的
|
||||
const initialValue = initialQuery[key]
|
||||
writable[key] =
|
||||
typeof initialValue === "boolean" ? false : typeof initialValue === "number" ? 0 : ""
|
||||
} else {
|
||||
// 处理不同类型的参数
|
||||
if (typeof initialQuery[key] === "boolean") {
|
||||
writable[key] = value === "1" || value === "true"
|
||||
@@ -65,7 +72,21 @@ export function usePagination<T extends Record<string, any>>(
|
||||
// 更新 URL
|
||||
function updateRoute() {
|
||||
const newQuery = filterEmptyValue(query)
|
||||
router.push({
|
||||
// 和当前地址只差默认的 page / limit(后退到 /problem,同步完又补上 ?page=1&limit=30):
|
||||
// 是同一个页面,用 replace,别多压一条历史、让人得多按一次后退
|
||||
const normalized = (q: Record<string, unknown>) =>
|
||||
JSON.stringify(
|
||||
Object.entries(q)
|
||||
.filter(([key, value]) => {
|
||||
if (key === "page") return String(value) !== String(defaultPage)
|
||||
if (key === "limit") return String(value) !== String(defaultLimit)
|
||||
return value != null && value !== ""
|
||||
})
|
||||
.map(([key, value]) => [key, String(value)])
|
||||
.sort(),
|
||||
)
|
||||
const navigate = normalized(route.query) === normalized(newQuery) ? router.replace : router.push
|
||||
navigate({
|
||||
path: route.path,
|
||||
query: newQuery,
|
||||
})
|
||||
|
||||
Reference in new issue
Block a user