From eb13125e656b0edd297b5c503e5d18e83f4d967f Mon Sep 17 00:00:00 2001 From: HyxiaoGe <18889592303@163.com> Date: Sun, 11 Oct 2026 22:38:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8E=A8=E8=8D=90=E9=97=AE=E9=A2=98=20r?= =?UTF-8?q?eady=20=E6=97=A9=E4=BA=8E=E6=B5=81=E7=BB=93=E6=9D=9F=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E9=9A=90=E8=97=8F=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../src/components/chat/AssistantMessage.test.tsx | 11 +++++++++++ frontend/src/components/chat/AssistantMessage.tsx | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/chat/AssistantMessage.test.tsx b/frontend/src/components/chat/AssistantMessage.test.tsx index fff4701c..aa1df0ed 100644 --- a/frontend/src/components/chat/AssistantMessage.test.tsx +++ b/frontend/src/components/chat/AssistantMessage.test.tsx @@ -636,6 +636,17 @@ describe('AssistantMessage', () => { // 测试里的 selector 不订阅 store,换一个 message 引用触发重渲染。 rerender(); expect(screen.getByTestId('suggested-questions')).toBeInTheDocument(); + + // ready 事件先于封口到达,流结束前推荐区不能消失。 + rerender( + , + ); + expect(screen.getByTestId('suggested-questions')).toBeInTheDocument(); streamSlotState.byConversation = {}; }); }); diff --git a/frontend/src/components/chat/AssistantMessage.tsx b/frontend/src/components/chat/AssistantMessage.tsx index 0c8b35d0..d1b66fc8 100644 --- a/frontend/src/components/chat/AssistantMessage.tsx +++ b/frontend/src/components/chat/AssistantMessage.tsx @@ -210,8 +210,9 @@ function AssistantMessageFrame({ const slot = selectStreamSlot(state, conversationId); return slot.displayedTextLength >= slot.totalTextLength; }); + // ready 事件在封口前就会到达,状态从 pending 变 ready 后也要继续显示到流结束,否则会闪一下。 const awaitingSuggestedQuestions = isStreaming - && message.suggestedQuestionsStatus === 'pending' + && (message.suggestedQuestionsStatus === 'pending' || message.suggestedQuestionsStatus === 'ready') && streamTextCaughtUp; const answerEvidenceSidebar = useMemo(