diff --git a/src/components/providers/EditProviderDialog.tsx b/src/components/providers/EditProviderDialog.tsx index 9b2d5bbbe..83ede9e11 100644 --- a/src/components/providers/EditProviderDialog.tsx +++ b/src/components/providers/EditProviderDialog.tsx @@ -139,6 +139,8 @@ export function EditProviderDialog({ }, [liveSettings, provider?.settingsConfig]); // 只依赖 settingsConfig,不依赖整个 provider // 固定 initialData,防止 provider 对象更新时重置表单 + // 注意:不依赖 provider?.meta,避免 providers refetch 时触发重新计算导致闪烁 + // meta 的初始化已在 ProviderForm 中通过 useEffect 处理(line 203-225) const initialData = useMemo(() => { if (!provider) return null; return { @@ -147,14 +149,13 @@ export function EditProviderDialog({ websiteUrl: provider.websiteUrl, settingsConfig: initialSettingsConfig, category: provider.category, - meta: provider.meta, + meta: provider.meta, // 使用当前 meta,但不在依赖中 icon: provider.icon, iconColor: provider.iconColor, }; }, [ open, // 修复:编辑保存后再次打开显示旧数据,依赖 open 确保每次打开时重新读取最新 provider 数据 provider?.id, // 只依赖 ID,provider 对象更新不会触发重新计算 - provider?.meta, // 需要依赖 meta 以便正确初始化 testConfig 和 proxyConfig initialSettingsConfig, ]); diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index eac36a651..dad5ccf5d 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -384,9 +384,15 @@ export function ProviderForm({ } }, [appId, initialData, selectedPresetId, resetCodexConfig]); + // Only reset form when defaultValues changes in NEW mode (not edit mode) + // In edit mode, resetting on every provider data change would cause blinking + // and discard user's ongoing edits when providers refetch periodically useEffect(() => { + if (isEditMode && initialData) { + return; + } form.reset(defaultValues); - }, [defaultValues, form]); + }, [defaultValues, form, isEditMode, initialData]); const presetCategoryLabels: Record = useMemo( () => ({