แสดงที่อยู่แบบอ่านอย่างเดียว
จัดรูปแบบที่อยู่ไทยที่เลือกไว้แล้วให้เป็นข้อความอ่านง่าย ไม่ต้องโหลดดัชนีที่อยู่
ThaiAddressDisplay เหมาะกับหน้าที่ต้องแสดงที่อยู่ที่บันทึกไว้แล้ว เช่นหน้าสรุปคำสั่งซื้อหรือโปรไฟล์ผู้ใช้ เป็นคอมโพเนนต์อ่านอย่างเดียว ไม่มี Base UI และไม่โหลดดัชนีที่อยู่ จึงมี style เดียว
import { ThaiAddressDisplay, type ThaiAddressDisplayValue } from '@/components/thai-address-display'
const address: ThaiAddressDisplayValue = {
tambon: 'คลองตันเหนือ',
tambonEn: 'Khlong Tan Nuea',
amphure: 'วัฒนา',
amphureEn: 'Watthana',
province: 'กรุงเทพมหานคร',
provinceEn: 'Bangkok',
zipCode: '10110',
subdistrict: 'คลองตันเหนือ',
subdistrictEn: 'Khlong Tan Nuea',
district: 'วัฒนา',
districtEn: 'Watthana',
postalCode: '10110',
houseNo: '99/9',
moo: '4',
soi: '2',
street: 'สุขุมวิท',
}
export default function AddressDisplayDemo() {
return <ThaiAddressDisplay value={address} />
}ติดตั้ง
npx react-thaizip add address-displayCLI เลือกไฟล์ให้ตาม style ที่ init บันทึกไว้: โปรเจกต์ที่มี components.json ของ shadcn/ui จะได้ไฟล์ที่ประกอบจาก primitives ของ shadcn (Base UI, Radix หรือ React Aria) นอกนั้นได้แบบ vanilla
วิธีใช้
import { ThaiAddressDisplay } from '@/components/thai-address-display'<ThaiAddressDisplay value={address} />value รับที่อยู่ที่ resolve ไว้แล้ว (ResolvedThaiAddress บวก houseNo/moo/soi/street แบบ optional มี type ชื่อ ThaiAddressDisplayValue) หรือ null เมื่อยังไม่มีที่อยู่ ซึ่งจะแสดง emptyText แทน
ตัวอย่าง
หลายบรรทัด
ใช้ mode="multi-line" เพื่อแยกส่วนบ้านเลขที่/หมู่/ซอย/ถนน กับส่วนตำบล-อำเภอ-จังหวัดออกเป็นคนละบรรทัด
import { ThaiAddressDisplay, type ThaiAddressDisplayValue } from '@/components/thai-address-display'
const address: ThaiAddressDisplayValue = {
tambon: 'คลองตันเหนือ',
tambonEn: 'Khlong Tan Nuea',
amphure: 'วัฒนา',
amphureEn: 'Watthana',
province: 'กรุงเทพมหานคร',
provinceEn: 'Bangkok',
zipCode: '10110',
subdistrict: 'คลองตันเหนือ',
subdistrictEn: 'Khlong Tan Nuea',
district: 'วัฒนา',
districtEn: 'Watthana',
postalCode: '10110',
houseNo: '99/9',
moo: '4',
soi: '2',
street: 'สุขุมวิท',
}
export default function AddressDisplayMultiLine() {
return <ThaiAddressDisplay value={address} mode="multi-line" />
}แสดงเป็นภาษาอังกฤษ
ใช้ locale="en" เพื่อแสดงชื่อภาษาอังกฤษ คำว่า "หมู่"/"ซอย" จะเปลี่ยนเป็นคำทับศัพท์มาตรฐาน "Moo"/"Soi" โดยอัตโนมัติ ส่วนบ้านเลขที่และชื่อถนนแสดงตามที่กรอกไว้เสมอ
import { ThaiAddressDisplay, type ThaiAddressDisplayValue } from '@/components/thai-address-display'
const address: ThaiAddressDisplayValue = {
tambon: 'คลองตันเหนือ',
tambonEn: 'Khlong Tan Nuea',
amphure: 'วัฒนา',
amphureEn: 'Watthana',
province: 'กรุงเทพมหานคร',
provinceEn: 'Bangkok',
zipCode: '10110',
subdistrict: 'คลองตันเหนือ',
subdistrictEn: 'Khlong Tan Nuea',
district: 'วัฒนา',
districtEn: 'Watthana',
postalCode: '10110',
houseNo: '99/9',
moo: '4',
soi: '2',
street: 'สุขุมวิท',
}
export default function AddressDisplayEn() {
return <ThaiAddressDisplay value={address} locale="en" />
}ไม่มีบ้านเลขที่
เมื่อ value ไม่มี houseNo/moo/soi/street เลย จะแสดงเฉพาะตำบล-อำเภอ-จังหวัด
import { ThaiAddressDisplay, type ThaiAddressDisplayValue } from '@/components/thai-address-display'
const address: ThaiAddressDisplayValue = {
tambon: 'คลองตันเหนือ',
tambonEn: 'Khlong Tan Nuea',
amphure: 'วัฒนา',
amphureEn: 'Watthana',
province: 'กรุงเทพมหานคร',
provinceEn: 'Bangkok',
zipCode: '10110',
subdistrict: 'คลองตันเหนือ',
subdistrictEn: 'Khlong Tan Nuea',
district: 'วัฒนา',
districtEn: 'Watthana',
postalCode: '10110',
}
export default function AddressDisplayMinimal() {
return <ThaiAddressDisplay value={address} />
}ยังไม่มีที่อยู่
ส่ง value={null} เพื่อแสดง emptyText แทน (ค่าเริ่มต้นคือ "ไม่มีที่อยู่" หรือ "No address" ตาม locale)
import { ThaiAddressDisplay } from '@/components/thai-address-display'
export default function AddressDisplayEmpty() {
return <ThaiAddressDisplay value={null} />
}ปรับสไตล์
ใช้ className กับ <address> และ lineClassName กับแต่ละบรรทัดในโหมดหลายบรรทัด ตัวอย่างนี้ทำเป็นการ์ดและเน้นบรรทัดแรก
import { ThaiAddressDisplay, type ThaiAddressDisplayValue } from '@/components/thai-address-display'
const address: ThaiAddressDisplayValue = {
tambon: 'คลองตันเหนือ',
tambonEn: 'Khlong Tan Nuea',
amphure: 'วัฒนา',
amphureEn: 'Watthana',
province: 'กรุงเทพมหานคร',
provinceEn: 'Bangkok',
zipCode: '10110',
subdistrict: 'คลองตันเหนือ',
subdistrictEn: 'Khlong Tan Nuea',
district: 'วัฒนา',
districtEn: 'Watthana',
postalCode: '10110',
houseNo: '99/9',
moo: '4',
soi: '2',
street: 'สุขุมวิท',
}
export default function AddressDisplayStyled() {
return (
<ThaiAddressDisplay
value={address}
mode="multi-line"
className="rounded-lg border p-4 not-italic"
lineClassName="first:font-medium"
/>
)
}API Reference
| Prop | Type | ค่าเริ่มต้น | รายละเอียด |
|---|---|---|---|
value | ThaiAddressDisplayValue | null | — | จำเป็น ที่อยู่ที่จะแสดง; null จะแสดง emptyText แทน |
locale | 'th' | 'en' | 'th' | กำหนดภาษาของชื่อพื้นที่และ emptyText เริ่มต้น |
mode | 'single-line' | 'multi-line' | 'single-line' | 'single-line' ต่อส่วนถนนกับพื้นที่ด้วย ', ' ส่วน 'multi-line' แสดงเป็นสองบรรทัด |
emptyText | string | 'ไม่มีที่อยู่' / 'No address' | ข้อความเมื่อ value เป็น null ตาม locale |
className | string | — | <address> หลัก |
lineClassName | string | — | แต่ละบรรทัดในโหมด 'multi-line' |
ref | React.Ref<HTMLElement> | — | ส่งต่อไปยัง <address> |
ดูเพิ่มเติม
ดู การปรับแต่ง สำหรับปรับหน้าตา ถ้าต้องการให้ผู้ใช้เลือกหรือแก้ไขที่อยู่ ดู ฟอร์มที่อยู่แบบเต็ม หรือ cascade select