不存在的嵌套字段崩溃
- ConversationView.tsx和GroupAdminModal.tsx对群禁言列表用了完全相同的
React Query缓存键['group-mutes', topicId],但分别调用getGroupMutes
(单页,{items:[]}包装对象)和getAllGroupMutes(全部页,展开后的纯数组)
两个返回形状不同的函数。两个组件同时挂载时后写入的一方会覆盖缓存,
另一方读到错误形状后对undefined取.length直接崩溃,导致只要打开某个
群的"群管理"面板整个会话界面就白屏。改成两处统一用getAllGroupMutes,
真正共享同一份、同一种形状的数据
- GroupMute类型声明的是嵌套的user:{user_id,display_name},但真实响应
是扁平的{user_id,muted_by,muted_at,reason,status,version},且完全没有
display_name字段。这个字段错配从来没被暴露过,因为此前从未有真实账号
真正禁言过人后去看这个列表——本轮实测"禁言→查看列表"时才第一次真正
用真实数据渲染,立刻崩溃。改成扁平字段+交叉查群成员列表解析真实姓名
(同一模式ConversationView.tsx的memberByUserId、GroupFilesModal的
uploader_id都已经在用)
用全新账号在全新群里完整实测:禁言成员1人正确显示头像+姓名"systester2"
(不再是原始uid或崩溃),解除禁言后列表正确清零,两处此前必崩的入口
(群管理面板本身、禁言列表渲染)全部验证通过。
React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Oxc
- @vitejs/plugin-react-swc uses SWC
React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
Expanding the Oxlint configuration
If you are developing a production application, we recommend enabling type-aware lint rules by installing oxlint-tsgolint and editing .oxlintrc.json:
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["react", "typescript", "oxc"],
"options": {
"typeAware": true
},
"rules": {
"react/rules-of-hooks": "error",
"react/only-export-components": ["warn", { "allowConstantExport": true }]
}
}
See the Oxlint rules documentation for the full list of rules and categories.