首页 > 其他分享 >tanstack react-form antd示例

tanstack react-form antd示例

时间:2024-08-22 20:18:00浏览次数:8  
标签:form 示例 tanstack value react field state import antd

import { useForm } from "@tanstack/react-form";
import { zodValidator } from "@tanstack/zod-form-adapter";
import { z } from "zod";
import type { FieldApi } from "@tanstack/react-form";
import { Button, Input, Radio } from "antd";

function FieldInfo({ field }: { field: FieldApi<any, any, any, any> }) {
	return (
		<div>
			{field.state.meta.isTouched && field.state.meta.errors.length ? (
				<em style={{ color: "red" }}>{field.state.meta.errors.join(",")}</em>
			) : null}
			{field.state.meta.isValidating ? "Validating..." : null}
		</div>
	);
}

export default function App() {
	const form = useForm({
		defaultValues: {
			title: "",
			type: "本科",
		},
		onSubmit: async ({ value }) => {
			// Do something with form data
			console.log(value);
		},
		// Add a validator to support Zod usage in Form and Field
		validatorAdapter: zodValidator(),
	});

	return (
		<div>
			<h1>Zod Form Example</h1>
			<form
				onSubmit={(e) => {
					e.preventDefault();
					e.stopPropagation();
					form.handleSubmit();
				}}
			>
				<div>
					{/* A type-safe field component*/}
					<form.Field
						name="title"
						validators={{
							onChange: z.string().min(6, "至少6个字符"),
						}}
					>
						{(field) => {
							// Avoid hasty abstractions. Render props are great!
							return (
								<div>
									<Input
										id={field.name}
										name={field.name}
										value={field.state.value}
										onBlur={field.handleBlur}
										onChange={(e) => field.handleChange(e.target.value)}
										placeholder="论文标题"
									/>
									<FieldInfo field={field} />
								</div>
							);
						}}
					</form.Field>
				</div>
				<div>
					<form.Field name="type">
						{(field) => (
							<div>
								<Radio.Group
									id={field.name}
									name={field.name}
									onBlur={field.handleBlur}
									onChange={(e) => field.handleChange(e.target.value)}
									value={field.state.value}
								>
									<Radio value="大专">大专</Radio>
									<Radio value="本科">本科</Radio>
									<Radio value="硕士">硕士</Radio>
									<Radio value="博士">博士</Radio>
								</Radio.Group>
								<FieldInfo field={field} />
							</div>
						)}
					</form.Field>
				</div>
				<form.Subscribe
					selector={(state) => [state.canSubmit, state.isSubmitting]}
				>
					{([canSubmit, isSubmitting]) => (
						<Button type="primary" disabled={!canSubmit} htmlType="submit">
							{isSubmitting ? "..." : "提交"}
						</Button>
					)}
				</form.Subscribe>
			</form>
		</div>
	);
}

标签:form,示例,tanstack,value,react,field,state,import,antd
From: https://www.cnblogs.com/soarowl/p/18374647

相关文章

  • antd5版本修改Table组件滚动条样式
    因为项目需求,要将Table组件的样式修改为UI图所给的效果,但是怎么写都不生效最后发现在 .ant-table的样式中设了scrollbar-color,只要把这里的样式设为scrollbar-color:auto;然后再改.ant-table-body里面滚动条的样式,就可以了.ant-table-body{&::-w......
  • ChatGPT协助论文写作各阶段指令示例
    学境思源,一键生成论文初稿:AcademicIdeas-学境思源AI论文写作在学术论文写作过程中,我们经常面临选题、文献综述、研究设计、数据分析、写作润色等多方面的挑战。人工智能技术的发展为这些挑战提供了新的解决方案。ChatGPT作为一款强大的语言模型,能够在论文写作的各个阶段提......
  • React Hooks 的一些使用小技巧
    前言大家好,我是晓羽,文末有我帮助500+名同学完成改造的前端文章!欢迎大家观看~useState回调函数参数用法: 能够给useState通过回调函数的形式给useState提供初始参数。介绍: useState的参数可以有两种形式:1.useState(普通的数据)=>useState(0)/useState('abc')2.......
  • 体育数据API纳米奥运会数据API:高阶数据包接口文档API示例⑦
    纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本包含http协议以及websocket协议,主要通过http获取数......
  • ReactDOM.render 和 ReactDOM.createRoot 二者的区别
    ReactDOM.render和ReactDOM.createRoot都是用于在React应用程序中渲染组件的方法,但它们之间存在一些区别:ReactDOM.render:这个方法是React早期版本中使用的,现在已经被ReactDOM.createRoot替代。ReactDOM.render方法接受两个参数:第一个参数是要渲染的React组件,第二个......
  • Vue 学习 Ref shallowRef triggerRef customRef (Ref 和 Reactive的对比)
    RefshallowReftriggerRefcustomRef针对对象(引用类型)来说:Ref:深层次的检查后面的对象的每一层是否改变,会改变值,且页面渲染shallowRef:浅层次的检查对象内,想要修改必须要要对.value对象进行重新赋值obj.value.name='456'//这种方式只会让对象值更改,但不会让页面重新渲染,......
  • Ansible Jinja2 使用及示例
    目录Jinja2Jinja2For循环Jinja2If条件Jinja多值合并Jinja2掌握了Jinja才是深入Ansible-playbook的开始Jinja2For循环变量的提取使用{{variable}}{%statementexecution%}括起来的内容为Jinja2命令执行语句{%foriteminall_items%}{{item}}{%endfor......
  • stencil示例
    stencil是一个webcomponents开发框架。pnpmcreatestencilmy.counter.tsx:import{Component,h,Prop,State}from"@stencil/core";@Component({ tag:"my-counter", styleUrl:"my-counter.css", shadow:true,})exportclassMyCou......
  • lwc示例
    lwc是一个webcomponents开发工具。pnpmcreatelwr选择SPA。项目生成后,一些运行时包并不在package.json中,需手动安装。package.json:{"name":"lwrdemo","version":"0.0.1","license":"MIT","private":true,......
  • gpt给出的operator简单示例
    以下是一些有用的Operator的简单示例,这些示例展示了Operator的实际应用和功能。每个示例都是一个独立的Operator,用于处理特定的场景。1.NginxOperator功能管理Nginx实例的部署和配置。示例定义CRDapi/v1/nginx_types.go:typeNginxSpecstruct{Replicas......