-
Notifications
You must be signed in to change notification settings - Fork 2
【列表视图】配置面板属性变更后未实时生效(需点击保存)/ 导航与部分属性未正确同步 #833
Copy link
Copy link
Labels
bugSomething isn't workingSomething isn't working
Description
问题列表(结合详细排查后已合并):
1. 列表视图(ListView)配置面板中的大部分属性变更(如"显示记录数"、"允许打印"、"添加记录按钮"、选择模式等),仅在点击保存后才会生效,无法实时预览。
- 预期:修改任何配置应立即反映到主视图组件,达到实时(Live Preview)效果。
- 实际表现:侧边栏切换/勾选各种选项后,主表格、工具栏等内容未实时刷新,只有保存后才体现。
- 主要原因:配置变更只更新了
viewDraft,但PluginObjectView用了key={refreshKey},只有保存/创建时才会re-mount,普通变动(onViewUpdate)不触发key更换,导致视图不更新。 - 建议修复方案:
- 移除
key={refreshKey},或通过依赖viewDraft/activeView保证主组件可以响应props变化重新渲染; - 或在onViewUpdate时同步刷新key(不推荐,性能差,且用户体验差);
- 优化数据流:让Live Preview不需要重挂载即可响应配置变更。
- 移除
2. 导航模式(如Page/Drawer/Modal/Split/Popover)等设置面板切换无效,Overlay详情弹窗的导航配置未能和View配置实时同步。
- 预期:切换不同的导航模式,应随即生效,改变弹窗/分屏表现。
- 实际:导航配置(如mode: drawer/modal/...)实际取自objectDef.navigation,只在对象级用,视图级别的navigation未被消费。
- 建议修复方案:
- 让详情Overlay支持消费当前视图的navigation(activeView.navigation)或嵌套优先级 objectDef < activeView。
3. 各种Toolbar和Actions属性未实时生效,例如:
- 添加记录按钮(addRecord/addRecordViaForm)
- 允许打印(allowPrinting)
- 显示记录数(showRecordCount)
- 选择模式(selection)等
- 相关代码流上,很多prop已经透传到主ListView schema,但因为主视图未及时re-render,所以未生效。
4. 代码一致性与最佳实践建议:
- PluginObjectView建议React式解耦key依赖,利用useMemo等响应变化。
- 子组件/Overlay建议向下消费viewDraft或activeView内的所有控制项。
附问题截图��
复现步骤
- 打开Contacts模块,右侧列表视图配置面板
- 切换如添加记录、显示记录数、打印等选项
- 观察主表主体和Toolbar无实时响应,需等到点击"保存"才刷新配置
- 导航模式切换无效,始终是Drawer/未变成Split/Modal等
期望行为
- 切换任意面板属性后能立刻在列表中反映出来(Live Preview效果,无需保存)
- 导航模式等变更能及时同步到Overlay
相关代码位置:
- apps/console/src/components/ObjectView.tsx (handleViewUpdate, renderListView等)
- apps/console/src/components/ViewConfigPanel.tsx
- packages/plugin-list/src/ListView.tsx
- ...等
参考:
- ROADMAP 已有相关Phase 2, Phase 3优化记录,但本问题为实际体验断层
- [ ListView 属性和Live Preview 代码文档与测试用例详见 repo 搜索 ]
需要关注/修复标签:
bug, 配置, live preview
补充说明:建议修复后,务必补充自动化测试,覆盖所有toolbar、显示行为props的变更场景。
请开发修复后:记得运行
test、确保所有相关场景通过,必要时补充ROADMAP进度注记。
Reactions are currently unavailable
Metadata
Metadata
Labels
bugSomething isn't workingSomething isn't working