Skip to content

面板上仓库地志的两个子开关各出现两行,切换上面那行下面不同步 #658

Closed

Description

@modusensus

现象

设置 → 扩展功能 → 仓库地志打开后,「自动更新」和「面板发起 T1」两个子开关各渲染两遍。点上面那一行,下面那一行不跟着变,看起来像开关失灵。

v0.14.0-beta.1 已带此问题。

复现条件

只有把仓库地志的总闸打开才会出现。 总闸 chorographyEnabled 默认 false(src/config.js:1057),默认配置下看不到这两行——所以按默认配置复现不出来是正常的。

成因

chorographyAutoRefresh / chorographyT1FromPanel 既在 FEATURE_CHILDREN 里(flagRow 会跟着父行展开,各渲染一次),又由 choroSub 手写了一份(boolRow(..., { sub: true }),再各渲染一次)。

时间线:5c41d31 先写了 choroSub 里的手写行,5bad8a6 往 FEATURE_CHILDREN 补父关系时没删旧的。

影响范围

仅限面板显示。持久值与后端行为都正常——两个开关的读写都走同一份配置,重复的只是渲染点,所以「点上面那个,下面那个不变」是显示不同步,不是状态丢了。

现有测试为什么没抓到

  • test/inject-parent-gate.test.js 只反查「子项不能同时出现在 items 与 FEATURE_CHILDREN」,不检查「子项是否在别处被手写 boolRow 渲染」。
  • test/client.test.js 的座位去重只对六张常量表生效,手写 boolRow 不在表里。
  • 项目没有 React 渲染级测试(deps 里没有 react-dom),没法用 renderToStaticMarkup 兜底,只能靠结构断言。

修法见 PR #657:删掉 choroSub 的两行手写渲染,子项回到 flagRow 统一展开,并补上 gate;同时加两条断言把「子键被手写渲染」和「flagRow 不展开」都钉成红线。

Activity

  1. modusensus commented on Nov 11, 2026

    @modusensus
    MemberAuthor

    修在 #657:chorographyAutoRefresh / chorographyT1FromPanel 既在 FEATURE_CHILDREN 里、又由 choroSub 手写了一份,于是各渲染两遍、上下两行不联动。修法是删掉手写两行,子项统一由 flagRow 展开(父关时子行标注「不生效」,值保留),并补了两条防复发锁:前端每个子键不得手写渲染、flagRow 必须真展开子项并带 gate。

    已随 v0.14.0-beta.2 发布(31a49ccc)。更新后若仍有不联动的情况请重开。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions