Das absolute Minimum, um mit TanStack Form zu beginnen, ist die Erstellung eines TanstackFormController, wie unten mit der Employee Schnittstelle für unser Testformular gezeigt.
interface Employee {
firstName: string
lastName: string
employed: boolean
jobTitle: string
}
#form = new TanStackFormController()<Employee>(this, {
defaultValues: {
firstName: '',
lastName: '',
employed: false,
jobTitle: '',
},
})
interface Employee {
firstName: string
lastName: string
employed: boolean
jobTitle: string
}
#form = new TanStackFormController()<Employee>(this, {
defaultValues: {
firstName: '',
lastName: '',
employed: false,
jobTitle: '',
},
})
In diesem Beispiel bezieht sich this auf die Instanz Ihres LitElement, in dem Sie TanStack Form verwenden möchten.
Um ein Formularelement in Ihrer Vorlage mit TanStack Form zu verknüpfen, verwenden Sie die Methode field des TanstackFormController.
Der erste Parameter von field ist FieldOptions und der zweite ist eine Callback-Funktion zum Rendern Ihres Elements.
field(FieldOptions, callback)
field(FieldOptions, callback)
Unser abgeschlossenes Testformular sollte ungefähr so aussehen. Das Formular sammelt den Vornamen von einem Benutzereingabefeld.
export class TestForm extends LitElement {
#form = new TanStackFormController<Employee>(this, {
defaultValues: {
firstName: '',
lastName: '',
employed: false,
jobTitle: '',
},
})
render() {
return html` <p>Please enter your first name></p>
${this.#form.field(
{
name: `firstName`,
validators: {
onChange: ({ value }) =>
value.length < 3 ? 'Not long enough' : undefined,
},
},
(field: FieldApi<Employee, 'firstName'>) => {
return html` <div>
<label class="first-name-label">First Name</label>
<input
id="firstName"
type="text"
placeholder="First Name"
@blur="${() => field.handleBlur()}"
.value="${field.getValue()}"
@input="${(event: InputEvent) => {
if (event.currentTarget) {
const newValue = (event.currentTarget as HTMLInputElement)
.value
field.handleChange(newValue)
}
}}"
/>
</div>`
},
)}`
}
}
export class TestForm extends LitElement {
#form = new TanStackFormController<Employee>(this, {
defaultValues: {
firstName: '',
lastName: '',
employed: false,
jobTitle: '',
},
})
render() {
return html` <p>Please enter your first name></p>
${this.#form.field(
{
name: `firstName`,
validators: {
onChange: ({ value }) =>
value.length < 3 ? 'Not long enough' : undefined,
},
},
(field: FieldApi<Employee, 'firstName'>) => {
return html` <div>
<label class="first-name-label">First Name</label>
<input
id="firstName"
type="text"
placeholder="First Name"
@blur="${() => field.handleBlur()}"
.value="${field.getValue()}"
@input="${(event: InputEvent) => {
if (event.currentTarget) {
const newValue = (event.currentTarget as HTMLInputElement)
.value
field.handleChange(newValue)
}
}}"
/>
</div>`
},
)}`
}
}
Beachten Sie, dass Sie die Aktualisierung des Elements und des Formulars selbst handhaben müssen, wie im obigen Beispiel gezeigt.
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.