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) => {
|
Object.keys(initialQuery).forEach((key) => {
|
||||||
const value = route.query[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") {
|
if (typeof initialQuery[key] === "boolean") {
|
||||||
writable[key] = value === "1" || value === "true"
|
writable[key] = value === "1" || value === "true"
|
||||||
@@ -65,7 +72,21 @@ export function usePagination<T extends Record<string, any>>(
|
|||||||
// 更新 URL
|
// 更新 URL
|
||||||
function updateRoute() {
|
function updateRoute() {
|
||||||
const newQuery = filterEmptyValue(query)
|
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,
|
path: route.path,
|
||||||
query: newQuery,
|
query: newQuery,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in new issue
Block a user