diff --git a/src/views/message-center-view.jsx b/src/views/message-center-view.jsx index 60ec6bd6..95b0ff0f 100644 --- a/src/views/message-center-view.jsx +++ b/src/views/message-center-view.jsx @@ -236,7 +236,15 @@ function MessageHome({view, connected, chatList, myUserId, onTopicSelected, onOp // Was `useState(null)` + its own effect -- refetched from scratch (blank entries/badges for a // beat) every time this component remounted, e.g. after a trip to another sidepanel and back. const [bootstrap] = useCachedData(myUserId ? 'bootstrap:' + myUserId : null, getBootstrap, [myUserId]); - const offline = view === 'messages-offline' || (!!myUserId && connected === false); + // sidepanel-view.jsx 会在 sidePanelSelected 已经是 'messages-home'(例如收藏夹里的旧链接、浏览器 + // 从上次关闭前恢复的标签页)但 myUserId 还没就绪时,照样把这个视图渲染出来(它自己的 + // `fullPage = !myUserId || view !== 'messages-home'` 分支就是为这种情况准备的)——如果这时候 + // token 续登录失败或者还没跑完,原来这里只看 `!!myUserId && connected===false`,myUserId 本身是 + // null 时这个条件恒为 false,于是不会进入"加载中"分支,会话列表和 bootstrap 又因为 + // useCachedData 的 key 是 null 而永远不发请求,最终呈现的是一句容易误导人的"暂无会话/未找到 + // 相关会话"——用户会以为账号是空的,而不是"还没登录成功"。myUserId 本身为空也按"未连接"处理, + // 至少诚实地展示"加载中"而不是一个看起来正常但其实是半成品的空列表。 + const offline = view === 'messages-offline' || !myUserId || connected === false; // "置顶" only ever changed a background tint (see the `pinned` comment inside // normalizeConversations) -- every other IM this product's users have used floats a pinned chat to @@ -326,7 +334,14 @@ function MessageHome({view, connected, chatList, myUserId, onTopicSelected, onOp {item.unread ? {item.unread > 99 ? '99+' : item.unread} : item.muted ? notifications_off : null} )} - {filtered.length === 0 ?
search_off

未找到相关会话

: null} + {/* "未找到相关会话"(搜索图标)只在用户真的输入过搜索词却匹配不到时才准确——`conversations` + 本身为空(例如尚未完成登录/数据尚未拉取到、或租户把系统消息与文件助手都关闭且用户还没有 + 任何会话)跟"搜索没匹配到"是两种不同情况,原来两者共用同一句"未找到相关会话"+放大镜 + 图标,会把"这个账号目前就是没有任何会话"说成"你的搜索没找到东西",用户没搜索过却看到 + 搜索无结果的图标和文案。 */} + {filtered.length === 0 ? (query.trim() ? +
search_off

未找到相关会话

: +
forum

暂无会话

) : null}