# 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 && (
💡

請點擊「分析句子」查看文本的詳細分析

)} ``` --- ## 🎨 預期效果 ### 修改前(問題) 1. 用戶輸入 "Hello world" → 分析 → 顯示結果 2. 用戶修改為 "Good morning" → **舊的 "Hello world" 分析結果仍然顯示** ❌ 3. 造成混淆:新輸入 vs 舊結果不匹配 ### 修改後(解決) 1. 用戶輸入 "Hello world" → 分析 → 顯示結果 2. 用戶修改為 "Good morning" → **自動清除舊分析結果** ✅ 3. 用戶點擊「分析句子」→ 顯示 "Good morning" 的新分析結果 ✅ --- ## 🔍 技術細節 ### 狀態管理邏輯 - **`lastAnalyzedText`**: 記錄上次成功分析的文本內容 - **`isInitialLoad`**: 區分頁面初始載入和用戶操作,避免載入時誤清除快取 - **清除條件**: `textInput !== lastAnalyzedText` 且不是初始載入狀態 ### 快取兼容性 - ✅ 保持現有的 localStorage 快取機制 - ✅ 頁面重新載入時正確恢復分析結果 - ✅ 只在用戶主動修改文本時才清除結果 ### 邊界情況處理 - **頁面載入時**: 不會意外清除快取的分析結果 - **空文本**: 當用戶清空輸入框時,分析結果會被清除 - **相同文本**: 如果用戶修改後又改回原來的文本,不會重複清除 --- ## 📁 需要修改的文件 ### 主要文件 - **`frontend/app/generate/page.tsx`** - 實現所有邏輯修改 ### 修改範圍 - 新增狀態變數 (2 行) - 新增 useEffect 監聽 (約 10 行) - 修改分析函數 (2 行) - 修改快取邏輯 (2 行) - 可選的 UI 提示 (約 8 行) **總計**: 約 25 行代碼修改,影響範圍小,風險低 --- ## ✅ 驗收標準 ### 功能驗收 1. ✅ 用戶輸入文本並分析後,修改輸入時舊結果立即消失 2. ✅ 頁面重新載入時,快取的分析結果正確恢復 3. ✅ 分析按鈕的狀態管理保持正常(loading、disabled 等) 4. ✅ 語法修正面板的交互功能不受影響 ### 用戶體驗驗收 1. ✅ 新輸入和分析結果始終保持一致 2. ✅ 沒有意外的結果清除或誤操作 3. ✅ 清晰的視覺反饋,用戶知道何時需要重新分析 --- ## 🚀 實施建議 ### 開發順序 1. **先實現核心邏輯** - 狀態管理和清除機制 2. **測試基本功能** - 確保清除邏輯正常運作 3. **優化快取邏輯** - 確保快取恢復不受影響 4. **添加用戶提示** - 提升用戶體驗 5. **全面測試** - 驗收所有功能點 ### 測試重點 - 多次輸入不同文本的分析流程 - 頁面重新載入的快取恢復 - 語法修正功能的正常運作 - 詞彙彈窗和保存功能的正常運作 這個改善方案將顯著提升 Generate 頁面的用戶體驗,避免輸入和分析結果不匹配的混淆問題。