Commit fb38f2de by luoqi

perf(web): 列表页去掉挂载时的双请求

usePlansList 初始 query 带上默认 sort + setQuery 引用稳定(值没变返回原对象),
消除"先无 sort 拉一次、再 [sort] effect 带 sort 拉一次"的重复请求(2→1)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
parent 7837d8c8
...@@ -110,6 +110,7 @@ export function PlansListApp() { ...@@ -110,6 +110,7 @@ export function PlansListApp() {
view: 'mine', view: 'mine',
page: 1, page: 1,
pageSize, pageSize,
sort, // 初始 query 带默认 sort,避免挂载时"先无 sort 拉一次、再带 sort 拉一次"的双请求
}); });
const { counts, reload: reloadCounts } = usePlanCounts(refreshToken); const { counts, reload: reloadCounts } = usePlanCounts(refreshToken);
......
...@@ -43,7 +43,18 @@ export function usePlansList(initial: Partial<ListPlansQuery> = DEFAULT_QUERY): ...@@ -43,7 +43,18 @@ export function usePlansList(initial: Partial<ListPlansQuery> = DEFAULT_QUERY):
}, [load, query]); }, [load, query]);
const setQuery = useCallback((next: Partial<ListPlansQuery>) => { const setQuery = useCallback((next: Partial<ListPlansQuery>) => {
setQueryState((prev) => ({ ...prev, ...next, page: next.page ?? 1 })); setQueryState((prev) => {
const merged = { ...prev, ...next, page: next.page ?? 1 };
// 引用稳定:值没变就返回原对象,避免 [query] effect 重复 load
// (挂载时 sort/keyword effect 用默认值 setQuery 不再触发多余请求)
const keys = new Set([...Object.keys(prev), ...Object.keys(merged)]);
for (const k of keys) {
if ((prev as Record<string, unknown>)[k] !== (merged as Record<string, unknown>)[k]) {
return merged;
}
}
return prev;
});
}, []); }, []);
const refresh = useCallback(() => { const refresh = useCallback(() => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment