每個成熟的專案都應該有其指導開發的核心哲學。若缺乏核心理念,開發過程可能會陷入無止境的決策困境,最終導致 API 設計薄弱。
本文概述了驅動 TanStack Form 開發與功能設計的核心原則。
API 設計必然伴隨權衡取捨。因此,開發者常會想透過不同 API 來提供各種權衡方案。但這可能導致 API 碎片化,增加學習與使用難度。
雖然這意味著較高的學習曲線,但能讓您無需糾結該選用哪種 API,也不會在切換 API 時增加認知負擔。
TanStack Form 的設計強調靈活性與可定制化。雖然多數表單可能遵循相似模式,但總會存在例外情況——尤其是當表單成為應用核心元件時。
因此,TanStack Form 支援多種驗證方式:
在「受控與非受控輸入」的熱門議題中,TanStack Form 堅定採用受控式設計。
這帶來諸多優勢:
使用 TanStack Form 時,您不應需要傳遞泛型參數或使用內部型別。這是因為函式庫設計會從運行時預設值推斷所有型別。
當編寫足夠正確的 TanStack Form 程式碼時,除了對運行時值的型別轉換外,您應該無法區分 JavaScript 與 TypeScript 的使用差異。
不建議寫法:
useForm<MyForm>()
useForm<MyForm>()
建議寫法:
interface Person {
name: string
age: number
}
const defaultPerson: Person = { name: 'Bill Luo', age: 24 }
useForm({
defaultValues: defaultPerson,
})
interface Person {
name: string
age: number
}
const defaultPerson: Person = { name: 'Bill Luo', age: 24 }
useForm({
defaultValues: defaultPerson,
})
TanStack Form 的主要目標之一,是讓您能將其封裝進自己的元件系統或設計系統中。
為支援此目標,我們提供多種工具來簡化自訂元件與鉤子的開發:
// 從您的函式庫匯出已預綁定表單元件的工具
export const { useAppForm, withForm } = createFormHook(/* options */)
// 從您的函式庫匯出已預綁定表單元件的工具
export const { useAppForm, withForm } = createFormHook(/* options */)
若不這麼做,將大幅增加應用程式的樣板程式碼,並降低表單的一致性和使用者體驗。
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.