TanStack Form 是一个无头库,为您提供完全的灵活性来根据您的需要设置样式。它与各种 UI 库兼容,包括 Tailwind、Material UI、Mantine,甚至纯 CSS。
本指南侧重于 Material UI 和 Mantine,但这些概念适用于您选择的任何 UI 库。
在将 TanStack Form 与 UI 库集成之前,请确保您的项目中已安装必要的依赖项
注意:虽然您可以混合搭配库,但通常建议坚持使用一个库,以保持一致性并最大限度地减少臃肿。
这是一个示例,演示了 TanStack Form 与 Mantine 组件的集成
import { TextInput, Checkbox } from '@mantine/core'
import { useForm } from '@tanstack/react-form'
export default function App() {
const { Field, handleSubmit, state } = useForm({
defaultValues: {
firstName: '',
lastName: '',
isChecked: false,
},
onSubmit: async ({ value }) => {
// Handle form submission
console.log(value)
},
})
return (
<>
<form
onSubmit={(e) => {
e.preventDefault()
handleSubmit()
}}
>
<Field
name="firstName"
children={({ state, handleChange, handleBlur }) => (
<TextInput
defaultValue={state.value}
onChange={(e) => handleChange(e.target.value)}
onBlur={handleBlur}
placeholder="Enter your name"
/>
)}
/>
<Field
name="isChecked"
children={({ state, handleChange, handleBlur }) => (
<Checkbox
onChange={(e) => handleChange(e.target.checked)}
onBlur={handleBlur}
checked={state.value}
/>
)}
/>
</form>
<div>
<pre>{JSON.stringify(state.values, null, 2)}</pre>
</div>
</>
)
}
import { TextInput, Checkbox } from '@mantine/core'
import { useForm } from '@tanstack/react-form'
export default function App() {
const { Field, handleSubmit, state } = useForm({
defaultValues: {
firstName: '',
lastName: '',
isChecked: false,
},
onSubmit: async ({ value }) => {
// Handle form submission
console.log(value)
},
})
return (
<>
<form
onSubmit={(e) => {
e.preventDefault()
handleSubmit()
}}
>
<Field
name="firstName"
children={({ state, handleChange, handleBlur }) => (
<TextInput
defaultValue={state.value}
onChange={(e) => handleChange(e.target.value)}
onBlur={handleBlur}
placeholder="Enter your name"
/>
)}
/>
<Field
name="isChecked"
children={({ state, handleChange, handleBlur }) => (
<Checkbox
onChange={(e) => handleChange(e.target.checked)}
onBlur={handleBlur}
checked={state.value}
/>
)}
/>
</form>
<div>
<pre>{JSON.stringify(state.values, null, 2)}</pre>
</div>
</>
)
}
集成 Material UI 组件的过程类似。这是一个使用 Material UI 中的 TextField 和 Checkbox 的示例
<Field
name="lastName"
children={({ state, handleChange, handleBlur }) => {
return (
<TextField
id="filled-basic"
label="Filled"
variant="filled"
defaultValue={state.value}
onChange={(e) => handleChange(e.target.value)}
onBlur={handleBlur}
placeholder="Enter your last name"
/>
);
}}
/>
<Field
name="isMuiCheckBox"
children={({ state, handleChange, handleBlur }) => {
return (
<MuiCheckbox
onChange={(e) => handleChange(e.target.checked)}
onBlur={handleBlur}
checked={state.value}
/>
);
}}
/>
<Field
name="lastName"
children={({ state, handleChange, handleBlur }) => {
return (
<TextField
id="filled-basic"
label="Filled"
variant="filled"
defaultValue={state.value}
onChange={(e) => handleChange(e.target.value)}
onBlur={handleBlur}
placeholder="Enter your last name"
/>
);
}}
/>
<Field
name="isMuiCheckBox"
children={({ state, handleChange, handleBlur }) => {
return (
<MuiCheckbox
onChange={(e) => handleChange(e.target.checked)}
onBlur={handleBlur}
checked={state.value}
/>
);
}}
/>
您的每周 JavaScript 新闻速递。每周一免费发送给超过 100,000 名开发者。