# Generate 頁面 UX 改善計劃 ## 🎯 問題描述 ### 目前的問題 當用戶在 `http://localhost:3001/generate` 頁面輸入英文文本進行分析後: 1. **第一次分析**:用戶輸入文本 → 點擊「分析句子」→ 下方顯示分析結果 ✅ 2. **想要分析新文本時**:用戶在輸入框中輸入新文本 → **舊的分析結果仍然顯示** ❌ 3. **用戶體驗問題**:新輸入的文本和下方顯示的舊分析結果不匹配,造成混淆 ### 期望的使用流程 1. 用戶輸入文本 2. 點擊「分析句子」→ 顯示對應的分析結果 3. 當用戶開始輸入**新文本**時 → **自動清除舊的分析結果** 4. 用戶需要再次點擊「分析句子」才會顯示新文本的分析結果 --- ## 🔧 解決方案 ### 核心改善邏輯 添加**智能清除機制**:當用戶開始修改輸入文本時,自動清除之前的分析結果,避免新輸入和舊結果的不匹配。 ### 技術實現方案 #### 1. **新增狀態管理** ```typescript // 新增以下狀態 const [lastAnalyzedText, setLastAnalyzedText] = useState('') const [isInitialLoad, setIsInitialLoad] = useState(true) ``` #### 2. **實現清除邏輯** ```typescript // 監聽文本輸入變化 useEffect(() => { // 如果不是初始載入,且文本與上次分析的不同 if (!isInitialLoad && textInput !== lastAnalyzedText) { // 清除分析結果 setSentenceAnalysis(null) setSentenceMeaning('') setGrammarCorrection(null) setSelectedIdiom(null) setSelectedWord(null) } }, [textInput, lastAnalyzedText, isInitialLoad]) ``` #### 3. **修改分析函數** ```typescript const handleAnalyzeSentence = async () => { // ... 現有邏輯 ... // 分析成功後,記錄此次分析的文本 setLastAnalyzedText(textInput) setIsInitialLoad(false) // ... 其他邏輯 ... } ``` #### 4. **優化快取邏輯** ```typescript // 恢復快取時標記為初始載入 useEffect(() => { const cached = loadAnalysisFromCache() if (cached) { setTextInput(cached.textInput || '') setLastAnalyzedText(cached.textInput || '') // 同步記錄 setSentenceAnalysis(cached.sentenceAnalysis || null) setSentenceMeaning(cached.sentenceMeaning || '') setGrammarCorrection(cached.grammarCorrection || null) setIsInitialLoad(false) // 標記快取載入完成 console.log('✅ 已恢復快取的分析結果') } else { setIsInitialLoad(false) // 沒有快取也要標記載入完成 } }, [loadAnalysisFromCache]) ``` --- ## 📋 詳細修改步驟 ### 步驟 1:新增狀態變數 在 `GenerateContent` 函數中新增: ```typescript const [lastAnalyzedText, setLastAnalyzedText] = useState('') const [isInitialLoad, setIsInitialLoad] = useState(true) ``` ### 步驟 2:添加文本變化監聽 在現有的 `useEffect` 後添加新的 `useEffect`: ```typescript // 監聽文本變化,自動清除不匹配的分析結果 useEffect(() => { if (!isInitialLoad && textInput !== lastAnalyzedText && sentenceAnalysis) { // 清除所有分析結果 setSentenceAnalysis(null) setSentenceMeaning('') setGrammarCorrection(null) setSelectedIdiom(null) setSelectedWord(null) console.log('🧹 已清除舊的分析結果,因為文本已改變') } }, [textInput, lastAnalyzedText, isInitialLoad, sentenceAnalysis]) ``` ### 步驟 3:修改 `handleAnalyzeSentence` 函數 在分析成功後添加: ```typescript // 在 setSentenceAnalysis(analysisData) 之後添加 setLastAnalyzedText(textInput) setIsInitialLoad(false) ``` ### 步驟 4:修改快取恢復邏輯 更新現有的快取恢復 `useEffect`: ```typescript useEffect(() => { const cached = loadAnalysisFromCache() if (cached) { setTextInput(cached.textInput || '') setLastAnalyzedText(cached.textInput || '') // 新增這行 setSentenceAnalysis(cached.sentenceAnalysis || null) setSentenceMeaning(cached.sentenceMeaning || '') setGrammarCorrection(cached.grammarCorrection || null) console.log('✅ 已恢復快取的分析結果') } setIsInitialLoad(false) // 新增這行,標記載入完成 }, [loadAnalysisFromCache]) ``` ### 步驟 5:優化用戶體驗(可選) 在分析結果區域添加提示訊息,當沒有分析結果時顯示: ```typescript {/* 在分析結果區域前添加 */} {!sentenceAnalysis && textInput && (
請點擊「分析句子」查看文本的詳細分析