生活分享
Claude Code|新增一個小功能
為待辦清單加入篩選並驗證功能。這篇會把待辦清單加入「全部、未完成、已完成」三種篩選,走完需求、資料邏輯、介面、測試與瀏覽器驗證。篩選只改變看得到的項目,原始資料仍要保留;這個小功能能讓你練習把一句需求拆成清楚的驗收條件。
閱讀時間約 5 分鐘

實作 · CLI / Desktop / Web
這篇會把待辦清單加入「全部、未完成、已完成」三種篩選,走完需求、資料邏輯、介面、測試與瀏覽器驗證。篩選只改變看得到的項目,原始資料仍要保留;這個小功能能讓你練習把一句需求拆成清楚的驗收條件。
下載練習專案起始版Claude Code|準備第一個練習專案取得待辦清單材料,認識檔案及啟動方法。本系列共用一個小型待辦清單網站,讓你在不同功能教學裡看到熟悉的檔案與行為。它使用 HTML、CSS、JavaScript,不需要資料庫、API 金鑰或另外安裝 npm 套件。起始版已能新增、勾選與刪除待辦;後面的練習會加入篩選、儲存和測試,讓你逐步理解 Claude Code 如何協助改動專案。閱讀全文,在獨立資料夾解壓縮,確認 npm test 通過。若想對照結果,可另下載參考完成版,放在另一個資料夾;完成版還包含保存功能,本篇只做篩選,不必先完成前面所有文章。
先寫出使用者行為
閱讀完整文字說明
新增一個小功能,以流程和文件圖形呈現教學重點。
建立兩筆待辦,將其中一筆完成。按「未完成」應只看到尚未完成的項目;按「已完成」看到完成項目;切回「全部」仍有兩筆。這個例子明確說明篩選不能把不符合的資料刪掉,也不能因顯示順序改變而操作錯誤項目。
請在起始版加入全部、未完成、已完成三種篩選。
限制:不增加套件,不改項目資料結構,篩選只影響顯示。
勾選與刪除仍依 id 進行,切回全部不能遺失原始資料。
先讀現有程式與測試,提出最小修改與驗收方案。
閱讀方案時,預期主要改 model.js、app.js、index.html 與測試。style.css 已有基本按鈕風格,可依需要做小調整;不應因此遷移框架或加入資料庫。確認方案後明確要求實作,並保留每一步差異供審查。
建立純資料篩選函式
以下函式接收原始陣列和模式,回傳要顯示的項目。它不改變原始陣列,也不重新建立識別碼。使用純函式能讓測試不依賴瀏覽器畫面,先確認資料規則正確,再接上 DOM。
export function filterTodos(items, mode) {
if (mode === 'active') return items.filter(item => !item.completed);
if (mode === 'completed') return items.filter(item => item.completed);
return items;
}
這個範例把未知模式視為全部;你也可以選擇明確拒絕,但要讓介面與測試一致。本篇採用簡單的回退方式,重點是不要把 items 直接改成篩選結果。若這麼做,切回全部時就找不回被排除的項目。
把模式接到頁面
在 index.html 的篩選預留註解處加入三個按鈕,用 data-filter 表示模式。按鈕需指定 type="button",避免日後移入表單時意外送出。aria-pressed 表示目前選中狀態,讓視覺以外的操作方式也能辨認。
<nav class="filters" aria-label="待辦篩選">
<button type="button" data-filter="all" aria-pressed="true">全部</button>
<button type="button" data-filter="active" aria-pressed="false">未完成</button>
<button type="button" data-filter="completed" aria-pressed="false">已完成</button>
</nav>
app.js 匯入 filterTodos,保留 items 作為原始資料,另以 mode 保存目前篩選。點按鈕時只更新 mode 並重畫;render 迴圈改讀 filterTodos(items, mode)。每次重畫也更新按鈕的 aria-pressed,不能只改顏色卻留下錯誤的狀態資訊。
請匯入 filterTodos,新增預設為 all 的 mode。
替 data-filter 按鈕加入事件,只更新 mode 並呼叫 render。
render 以 filterTodos(items, mode) 產生顯示項目,items 保留完整資料。
同步更新 aria-pressed,保留原有以 item.id 進行勾選與刪除的邏輯。
補上行為測試
新增一份獨立測試檔,使用與起始版相同的 Node.js 內建工具。測試不必模仿每一行實作,而應確認重要行為:兩種篩選的結果、切回全部與原始資料保留。下例可以直接放到 tests 目錄。
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { filterTodos } from '../model.js';
test('篩選只影響顯示,原始項目保持不變', () => {
const items = [
{ id: 'a', title: '讀書', completed: false },
{ id: 'b', title: '運動', completed: true },
];
assert.deepEqual(filterTodos(items, 'active').map(x => x.id), ['a']);
assert.deepEqual(filterTodos(items, 'completed').map(x => x.id), ['b']);
assert.deepEqual(filterTodos(items, 'all').map(x => x.id), ['a', 'b']);
assert.equal(items.length, 2);
assert.equal(items[0].completed, false);
});
在專案終端機執行 npm test,確認原有四項加上新測試都通過。若新測試找不到函式,先查匯出與路徑;若全部測試變少,查是否意外改壞測試搜尋命令。不能只看最後顯示綠色,就忽略本來應該執行的測試被跳過。
在瀏覽器完成驗收
檢查差異時特別看事件監聽是否被重複加入。篩選按鈕的監聽可以在初始化時設定一次;如果每次 render 都重複註冊,使用者點一次可能觸發多次工作。資料列會重建則有不同生命週期,應理解哪些 DOM 被保留、哪些被替換,而不是把所有事件都塞到同一個函式。
另一個細節是新增資料時的篩選行為。當目前選「已完成」而新待辦預設未完成,新增成功後它暫時不出現在清單是合理結果,但使用者應能從狀態資訊或切回全部確認資料存在。不要為了讓新項目立刻出現而偷偷把它設為已完成,這會改變原本的資料含義。
本篇先保留全體待辦的總數提示;若你希望顯示「目前篩選共幾筆」,要明確區分顯示數與資料總數。可以作為下一個小任務新增,例如「顯示 1/3 筆」,再補上三種模式與空結果的檢查。這樣不會在不知不覺間改掉既有統計的意思。
執行 npm start,開啟實際輸出的本機網址。先新增三筆不同待辦,再完成其中一筆,依表格逐項操作。測試資料用自己的練習文字即可,不需要真實私人工作事項。
| 操作 | 預期結果 | 失敗時先查 |
|---|---|---|
| 選未完成 | 只見未完成項目 | mode 與 filterTodos |
| 選已完成 | 只見已完成項目 | completed 條件 |
| 切回全部 | 三筆都還在 | 是否覆寫 items |
| 篩選中勾選 | 正確項目改變狀態 | 是否依 id 操作 |
| 篩選中刪除 | 只刪指定項目 | 是否誤用畫面索引 |
再調成 390px 寬度,確認按鈕能操作、長文字不撐寬頁面,並用鍵盤 Tab 走一次。這些是瀏覽器層的檢查,資料函式測試無法完全代替。起始版重新整理會清空資料,仍屬既有設計;本篇不把保存功能混進驗收。
小練習是加入空清單情境,確認某個篩選沒有結果時仍可切回其他模式。完成判準是測試通過、三種篩選與勾選刪除正常、資料不丟失且手機可讀。最後請 Claude 整理實際差異與未驗證部分,接著用Git 審查Claude Code|Git、差異審查與 PR檢查差異、整理提交與準備 PR。Claude Code 完成功能後,還需要檢查差異、整理提交並決定如何交給他人審查。本篇用待辦專案示範 Git 工作目錄、暫存區與提交的關係,最後準備一份 Pull Request 說明。你會知道測試通過、本機提交、遠端 PR、合併與部署是不同狀態。閱讀全文準備交付。
回 Claude Code 教學總目錄Claude Code 完整教學目錄:從入門到自動化依平台、程度與功能找到需要的教學,從 96 篇文章與共用練習專案逐步完成操作。這個教學中心把 Claude Code 分成 96 個可以獨立閱讀的小題目,從桌面、CLI、網頁與手機開始,再學 MD 規則、常用指令、Skills、MCP 與自動化。你可以依推薦路線循序學習,也可以直接搜尋正在遇到的功能、命令或檔名。目錄依目前公開狀態顯示可閱讀文章。閱讀全文
同主題延伸閱讀
生活分享
Claude Code|建立第一個 mod:在 Claude Code 行程內數工具呼叫
寫一個三檔案的 mod,用驗證器與測試確認它掛上的事件。文件把 mod 定義成多了入口檔的 plugin:入口檔叫 hooks module,Claude Code 在事件發生時呼叫裡面的函式,函式可以觀察、改寫或接手事件。
生活分享
Claude Code|Git Worktree 平行工作
隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。
生活分享
Claude Code|雙 Worktree 實作與衝突整合
隔離兩項功能,最後完成整合與回歸。兩個 Claude 工作階段同時編輯專案,最容易出現的問題是互相改到同一份檔案,或各自測試通過、整合後卻失敗。本篇用兩個 Worktree 分別處理篩選預設值與介面文字,故意製造一次小衝突,再完成整合、驗證與清理。你不需要先啟用 Agent Teams。
生活分享
Claude Code|比較流程品質、用量與執行時間
以同一資料集比較兩種工作方法。比較兩種 Claude 工作方法時,不能只挑成功那一次,也不能只看第一個答案有多快。本篇用固定案例、原始紀錄和一致判準,比較品質、重試、等待與人工整合時間,最後寫出有樣本數與限制的報告,而不是保證某個方法一定省錢。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Common workflows · 查證日期:
- Best practices for Claude Code · 查證日期: