fix(settings): reset scroll on tab switch (#4165)

This commit is contained in:
muleizh
2026-06-16 08:29:36 +08:00
committed by GitHub
parent c548e7fcba
commit 12567b3229
2 changed files with 34 additions and 5 deletions
+19 -2
View File
@@ -1,4 +1,11 @@
import { useCallback, useEffect, useMemo, useState } from "react";
import {
useCallback,
useEffect,
useLayoutEffect,
useMemo,
useRef,
useState,
} from "react";
import { motion } from "framer-motion";
import {
Loader2,
@@ -102,6 +109,7 @@ export function SettingsPage({
const [activeTab, setActiveTab] = useState<string>("general");
const [showRestartPrompt, setShowRestartPrompt] = useState(false);
const tabScrollContainerRef = useRef<HTMLDivElement>(null);
useEffect(() => {
if (open) {
@@ -116,6 +124,12 @@ export function SettingsPage({
}
}, [requiresRestart]);
useLayoutEffect(() => {
if (tabScrollContainerRef.current) {
tabScrollContainerRef.current.scrollTop = 0;
}
}, [activeTab]);
const closeAfterSave = useCallback(() => {
// 保存成功后关闭:不再重置语言,避免需要“保存两次”才生效
acknowledgeRestart();
@@ -226,7 +240,10 @@ export function SettingsPage({
</TabsList>
<div className="flex-1 min-h-0 flex flex-col">
<div className="flex-1 overflow-y-auto overflow-x-hidden pr-2">
<div
ref={tabScrollContainerRef}
className="flex-1 overflow-y-auto overflow-x-hidden pr-2"
>
<TabsContent value="general" className="space-y-6 mt-0">
{settings ? (
<motion.div