WebberUI

台灣地址選擇器

縣市/鄉鎮市區二級聯動選單,自動帶出郵遞區號。

台灣縣市與鄉鎮市區的二級聯動下拉選單,內建可搜尋過濾的自寫下拉、選定行政區後自動帶出 3 碼郵遞區號徽章,並組合出完整地址預覽列(含一鍵複製),適合結帳、收件與會員資料表單。

載入預覽⋯

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

<TaiwanAddressPicker />

安裝

npx shadcn@latest add https://webberui.com/r/taiwan-address-picker.json

或在 components.json 設定 registries 後,改用 @webberui/taiwan-address-picker 安裝。

安裝依賴後,從 registry JSON(/r/taiwan-address-picker.jsonfiles[0].content)複製 taiwan-address-picker.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion lucide-react clsx tailwind-merge

使用

import * as React from "react";
import {
  TaiwanAddressPicker,
  type TaiwanAddress,
} from "@/components/ui/taiwan-address-picker";

function CheckoutForm() {
  const [address, setAddress] = React.useState<TaiwanAddress>({
    city: "",
    district: "",
    zip: "",
    detail: "",
  });

  return <TaiwanAddressPicker value={address} onChange={setAddress} />;
}

也可以不傳 value 讓元件自行管理狀態,只透過 onChange 取得結果;另外匯出 formatTaiwanAddress(value) 可將地址物件組成「郵遞區號 縣市鄉鎮市區詳細地址」字串,TAIWAN_DISTRICTS 對照表也可直接取用。

Props

Prop型別預設值說明
valueTaiwanAddress受控值,形狀為 { city, district, zip, detail };不提供時元件內部自行管理
onChange(value: TaiwanAddress) => void任一欄位變動時回傳完整地址物件(換縣市會清空鄉鎮市區與郵遞區號)
showDetailbooleantrue是否顯示詳細地址輸入框
classNamestring透傳到外層容器

資料範圍

  • 內建全部 22 縣市清單;六都與基隆市、新竹市、嘉義市、連江縣收錄完整行政區。
  • 其餘縣市僅收錄 3–5 個代表行政區作為示範,下拉面板底部會顯示「示範資料」註記。
  • 生產環境請依中華郵政「3+3 郵遞區號」官方資料擴充元件內的 TAIWAN_DISTRICTS 對照表即可,結構不需更動。

可及性

  • 下拉觸發鈕標註 aria-haspopuparia-expanded,清單使用 role="listbox"role="option"(含 aria-selected
  • 面板開啟後自動聚焦搜尋框,支援上下方向鍵移動、Enter 選取、Escape 關閉,鍵盤導覽時選項自動捲動至可視範圍
  • 使用者系統開啟「減少動態效果」時,面板展開、郵遞區號徽章彈出與預覽列展開皆改為即時顯示,不播放動畫

On this page