From 9a1fff74fdbb37eba0fc8976f1f1a3e9ecce6648 Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Thu, 20 Mar 2025 11:40:47 +0800 Subject: [PATCH] fix: nextjs 14.2.24 cannot auto create local storage (#4249) (#4250) --- projects/app/src/pages/chat/share.tsx | 34 ++++++++++++------- .../app/src/web/core/chat/storeShareChat.ts | 13 ++++--- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/projects/app/src/pages/chat/share.tsx b/projects/app/src/pages/chat/share.tsx index 0d8e8f1e9..5cfd52856 100644 --- a/projects/app/src/pages/chat/share.tsx +++ b/projects/app/src/pages/chat/share.tsx @@ -248,9 +248,7 @@ const OutLink = (props: Props) => { {(!quoteData || isPc) && ( @@ -316,12 +314,12 @@ const OutLink = (props: Props) => { const Render = (props: Props) => { const { shareId, authToken, customUid, appId } = props; - const { localUId } = useShareChatStore(); + const { localUId, setLocalUId, loaded } = useShareChatStore(); const { source, chatId, setSource, setAppId, setOutLinkAuthData } = useChatStore(); const { setUserDefaultLng } = useI18nLng(); const chatHistoryProviderParams = useMemo(() => { - return { shareId, outLinkUid: authToken || customUid || localUId }; + return { shareId, outLinkUid: authToken || customUid || localUId || '' }; }, [authToken, customUid, localUId, shareId]); const chatRecordProviderParams = useMemo(() => { return { @@ -338,20 +336,32 @@ const Render = (props: Props) => { setUserDefaultLng(true); }); - // Set outLinkAuthData + // Set default localUId useEffect(() => { - setOutLinkAuthData({ - shareId, - outLinkUid: chatHistoryProviderParams.outLinkUid - }); + if (loaded) { + if (!localUId) { + setLocalUId(`shareChat-${Date.now()}-${getNanoid(24)}`); + } + } + }, [loaded, localUId, setLocalUId]); + + // Init outLinkAuthData + useEffect(() => { + if (chatHistoryProviderParams.outLinkUid) { + setOutLinkAuthData({ + shareId, + outLinkUid: chatHistoryProviderParams.outLinkUid + }); + } return () => { setOutLinkAuthData({}); }; - }, [chatHistoryProviderParams.outLinkUid, shareId]); + }, [chatHistoryProviderParams.outLinkUid, setOutLinkAuthData, shareId]); + // Watch appId useEffect(() => { setAppId(appId); - }, [appId]); + }, [appId, setAppId]); return source === ChatSourceEnum.share ? ( diff --git a/projects/app/src/web/core/chat/storeShareChat.ts b/projects/app/src/web/core/chat/storeShareChat.ts index 6256f0e20..9dc443759 100644 --- a/projects/app/src/web/core/chat/storeShareChat.ts +++ b/projects/app/src/web/core/chat/storeShareChat.ts @@ -1,14 +1,10 @@ import { create } from 'zustand'; import { devtools, persist } from 'zustand/middleware'; import { immer } from 'zustand/middleware/immer'; -import { customAlphabet } from 'nanoid'; -const nanoid = customAlphabet( - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ1234567890_', - 24 -); type State = { - localUId: string; + localUId?: string; + setLocalUId: (localUId: string) => void; loaded: boolean; }; @@ -16,7 +12,10 @@ export const useShareChatStore = create()( devtools( persist( immer((set, get) => ({ - localUId: `shareChat-${Date.now()}-${nanoid()}`, + localUId: undefined, + setLocalUId(localUId: string) { + set({ localUId }); + }, loaded: false })), {