Skip to content

React State优化:Table column#1247

Merged
CodFrm merged 5 commits into
scriptscat:release/v1.3from
cyfung1031:pr-Table-column-Render-002
Feb 18, 2026
Merged

React State优化:Table column#1247
CodFrm merged 5 commits into
scriptscat:release/v1.3from
cyfung1031:pr-Table-column-Render-002

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

测试过了
应该真的一个 useMemo 就行

@cyfung1031 cyfung1031 marked this pull request as draft February 14, 2026 07:43
@cyfung1031 cyfung1031 marked this pull request as ready for review February 14, 2026 08:39
@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Feb 16, 2026

又改回来了?

Comment thread src/pages/options/routes/ScriptList/ScriptTable.tsx Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 主要针对选项页脚本列表(Table 视图)的列定义与列宽调整逻辑做 React state/渲染优化:将 columns 统一收敛到一个 useMemo,并用“手动覆盖宽度”的方式减少列宽输入时触发表格重渲染,同时补充“重置成功”的多语言提示文案。

Changes:

  • 将表格 columns 由多处 useCallback/useMemo 组合改为单一 useMemo 生成,减少引用变化带来的重渲染。
  • 重做列宽调整:用 manualWidths 保存覆盖值、inputBuffer 处理输入缓冲、dealColumns 合并并过滤隐藏列(width = -1)。
  • 新增 reset_success i18n 文案,并调整部分语言的 save_success 表述。

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/pages/options/routes/ScriptList/ScriptTable.tsx 表格 columns 与列宽调整状态重构,增加重置提示与更轻量的列宽合并逻辑
src/locales/zh-TW/translation.json 新增 reset_success 文案
src/locales/zh-CN/translation.json 新增 reset_success 文案
src/locales/vi-VN/translation.json 新增 reset_success 文案
src/locales/ru-RU/translation.json 新增 reset_success;调整 save_success 文案
src/locales/ja-JP/translation.json 新增 reset_success 文案
src/locales/en-US/translation.json 新增 reset_success;调整 save_success 文案
src/locales/de-DE/translation.json 新增 reset_success 文案
src/locales/ach-UG/translation.json 新增 reset_success 文案(当前为英文直出)

[]
);

const currentActiveWidth = manualWidths[columns[selectColumn].key as string] ?? columns[selectColumn].width;
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里 currentActiveWidth 没有像上面的 effect 一样做 ?? 0 回退:当选中 name 这类 width 未定义的列时,currentActiveWidth 会变成 undefined,导致 isSpecialWidthfalse,Input 变成 type="number",但 value 又会显示成 t("auto") 的非数字字符串,可能出现受控输入异常/无法显示。建议把 currentActiveWidth 计算改为与 effect 一致(例如 manualWidths[key] ?? columns[selectColumn].width ?? 0),并保证 number 类型 input 的 value 始终是数字字符串。

Suggested change
const currentActiveWidth = manualWidths[columns[selectColumn].key as string] ?? columns[selectColumn].width;
const currentActiveWidth =
manualWidths[columns[selectColumn].key as string] ?? columns[selectColumn].width ?? 0;

Copilot uses AI. Check for mistakes.
: columns[selectColumn].width;
setWidth(selectColumn, width);
// If current is auto/hide, reset to base width; otherwise keep it
const baseWidth = columns[selectColumn].width as number;
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const baseWidth = columns[selectColumn].width as number; 这里用类型断言把 width 当成 number,但该字段在本文件里既可能是 string(例如 t("script_list_*_width") 返回值),也可能是 undefined(例如 name 列没有 width)。这会导致 manualWidths 写入非 number 值,后续保存到配置里类型也会被污染。建议在设置前对 baseWidth 做数值化与兜底(例如宽度为 string 时 parseInt/Number,undefined 时选一个合理默认值)。

Suggested change
const baseWidth = columns[selectColumn].width as number;
const rawWidth = columns[selectColumn].width;
let baseWidth: number;
if (typeof rawWidth === "number") {
baseWidth = rawWidth;
} else if (typeof rawWidth === "string") {
const parsed = parseInt(rawWidth, 10);
baseWidth = Number.isNaN(parsed) ? 120 : parsed;
} else {
// 没有配置宽度时使用一个合理的默认值
baseWidth = 120;
}

Copilot uses AI. Check for mistakes.
"cloud_sync_account_verification": "crwdns7954:0crwdne7954:0",
"cloud_sync_verification_failed": "crwdns7956:0crwdne7956:0",
"save_success": "crwdns7958:0crwdne7958:0",
"reset_success": "Reset successfully",
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ach-UG 语言包里同一区域的 save_success 仍然是 Crowdin 占位符(crwdns...),但这里新增的 reset_success 写成了英文直出,会让该语言包风格/管线不一致(也可能被翻译平台覆盖或导致回归)。建议将该值改为对应的 crwdns... 占位符,或与现有 ach-UG 的维护方式保持一致。

Suggested change
"reset_success": "Reset successfully",
"reset_success": "crwdns7959:0crwdne7959:0",

Copilot uses AI. Check for mistakes.
@CodFrm CodFrm merged commit 2fa4778 into scriptscat:release/v1.3 Feb 18, 2026
3 checks passed
@cyfung1031 cyfung1031 deleted the pr-Table-column-Render-002 branch March 22, 2026 16:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants