尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
HouseForm 字段联动技巧:listenTo 如何实现密码确认等跨字段校验
HouseForm 字段联动技巧listenTo 如何实现密码确认等跨字段校验【免费下载链接】houseformSimple to use React forms, where your validation and UI code live together in harmony.项目地址: https://gitcode.com/gh_mirrors/ho/houseformHouseForm 是一款将校验逻辑与 UI 代码同住一屋的 React 表单库而字段联动跨字段校验正是它最实用的高级能力之一。本篇文章将围绕 HouseForm 的listenTo属性手把手教你实现密码确认、条件字段等跨字段校验场景帮你彻底告别两个字段各校各的的尴尬局面。HouseForm 主打Simple to use React forms, where your validation and UI code live together in harmony.——校验逻辑直接写在 UI 组件旁边一个Field组件即可完成取值、渲染、校验。但当表单中两个字段相互依赖时例如密码与确认密码事情就没那么简单了。接下来我们就用listenTo轻松化解。为什么表单字段需要联动大多数表单校验是各自为政的用户名只校验用户名邮箱只校验邮箱。但真实业务中常有跨字段依赖密码与确认密码必须一致选择公司用户时才需要填写公司名称结束日期不得早于开始日期。如果不做字段联动用户先填完确认密码再回头修改密码表单里仍残留两次密码不一致的错误提示——体验很差。这就是HouseForm 跨字段校验要解决的问题。listenTo 一行代码实现字段监听HouseForm 的解决方案非常直接在Field组件上添加listenTo属性传入一个字段名数组当被监听的字段触发变更或失焦时监听方会同步重新执行对应校验。相关类型定义位于 lib/field/types.tsField nameconfirmpassword listenTo{[password]} onChangeValidate{(val, form) { if (val form.getFieldValue(password)!.value) { return Promise.resolve(true); } else { return Promise.reject(Passwords must match); } }} {/* ... */} /Field其中form.getFieldValue(password)用于在某个字段的校验函数里读取其他字段的值这正是跨字段校验的数据来源。官方对该用法的完整讲解见 linked-fields.md。实战用 listenTo 实现密码确认校验下面是一个完整的密码确认表单两步走即可搞定第一步密码字段做基础长度校验第二步确认密码字段通过listenTo{[password]}监听密码字段并在onChangeValidate中比对两个值import { Form, Field } from houseform; import { z } from zod; const App () ( Form onSubmit{(values) alert(JSON.stringify(values))} {({ submit, isValid }) ( Field namepassword onChangeValidate{z.string().min(8, 至少8个字符)} {({ value, setValue, onBlur, errors }) ( div input typepassword placeholder密码 value{value} onBlur{onBlur} onChange{(e) setValue(e.target.value)} / {errors.map((error) p key{error}{error}/p)} /div )} /Field Field nameconfirmpassword listenTo{[password]} onChangeValidate{(val, form) { if (val form.getFieldValue(password)!.value) { return Promise.resolve(true); } return Promise.reject(两次输入的密码不一致); }} {({ value, setValue, onBlur, errors, isTouched }) ( div input typepassword placeholder确认密码 value{value} onBlur{onBlur} onChange{(e) setValue(e.target.value)} / {isTouched errors.map((error) p key{error}{error}/p)} /div )} /Field button disabled{!isValid} onClick{submit}提交/button / )} /Form ); 关键点加了listenTo后只要用户修改密码字段HouseForm 就会自动重新校验确认密码字段错误提示实时刷新不再残留过期错误。listenTo 背后的工作原理listenTo的实现并不神秘核心逻辑在 lib/field/use-field-like.ts 的useListenToListenToArray函数中监听方把自己注册到被监听字段的onChangeListenerRefs、onBlurListenerRefs、onMountListenerRefs三组回调列表里当被监听字段调用setValue时通过setTimeout触发对应回调见 use-field-like.ts驱动监听方重新执行校验组件卸载时会自动清理监听器避免内存泄漏。简单说listenTo 订阅他人事件 重跑自己的校验优雅且零侵入。更多联动场景监听多个字段与条件字段listenTo支持数组一次监听多个字段比如日期区间校验Field nameendDate listenTo{[startDate]} /* ... */ /另一个常见的字段联动场景是条件显隐根据一个字段的值决定是否渲染另一个字段。你可以利用Form的value属性实现例如邮箱为 Gmail 时隐藏密码字段完整示例同样见 linked-fields.md 的 Conditional Fields 章节。使用 listenTo 的注意事项listenTo传的是字符串数组即使只监听一个字段也要写成[password]形式监听字段触发onBlur时监听方会执行自己的onBlurValidate触发onChange时执行onChangeValidate两类校验可分开配置想了解listenTo的完整 API 说明可查阅 field.md 参考文档其中对listenTo的语义有精确定义。总结HouseForm 的listenTo用一行属性就解决了表单字段联动难题无论是密码确认这类跨字段校验还是复杂的条件表单都不需要引入额外的状态管理或手工触发校验。如果你想在自己的 React 项目中亲自体验也可以直接git clone https://gitcode.com/gh_mirrors/ho/houseform查看源码与测试用例如 field.spec.tsx 中的监听场景。学会它你的表单体验将立刻上一个台阶【免费下载链接】houseformSimple to use React forms, where your validation and UI code live together in harmony.项目地址: https://gitcode.com/gh_mirrors/ho/houseform创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

深入原理:DeepSeek-V4-Pro-0813的DSpark投机解码如何实现数倍加速

深入原理:DeepSeek-V4-Pro-0813的DSpark投机解码如何实现数倍加速

深入原理:DeepSeek-V4-Pro-0813的DSpark投机解码如何实现数倍加速 大模型推理慢的根源在于自回归解码——每生成一个 token 都要串行等待一次完整前向。DeepSeek-V4-Pro-0813 通过内置的 DSpark 投机解码 模块,让"一次前向同时猜出多个 token"…

📅 2026/9/30 10:05:01
5分钟把照片变成可打印浮雕:ImageToSTL零基础图片转3D模型完整指南

5分钟把照片变成可打印浮雕:ImageToSTL零基础图片转3D模型完整指南

5分钟把照片变成可打印浮雕:ImageToSTL零基础图片转3D模型完整指南 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the…

📅 2026/9/30 7:43:14
3步永久解锁Wand专业版:这款开源游戏修改工具免费又安全

3步永久解锁Wand专业版:这款开源游戏修改工具免费又安全

3步永久解锁Wand专业版:这款开源游戏修改工具免费又安全 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 又到月底,Wand专业…

📅 2026/10/1 9:33:34
MORE NEWS

更多资讯

📰

基于LangGraph构建英语情景教学Agent:从MVP到部署全记录

做个英语情景教学Agent,其实比我想象中有意思。起因很朴素:想给学英语的人一个不用约时间、不会嫌烦的语伴,能陪你练点餐、订酒店、面试这种真实场景。做完之后发现,这不是套一层大模型壳那么简单,中间涉及Agent框架选…

📰

深度拆解童锦程.skill的5大心智模型:吸引力、给台阶与看透人性的框架全解析

深度拆解童锦程.skill的5大心智模型:吸引力、给台阶与看透人性的框架全解析 【免费下载链接】tong-jincheng-skill 童锦程视角 Skill — 用深情祖师爷的思维框架分析人际关系 项目地址: https://gitcode.com/gh_mirrors/to/tong-jincheng-skill 童锦程.skill…

📰

UGUI与粒子特效显示层级冲突:原理剖析与四种解决方案

做游戏界面的时候,我几乎每隔一段时间就会碰到同一条报错:一堆UI按钮叠得好好的,结果画面里放个粒子特效,不是被界面盖住,就是把按钮全糊住了。老手一看就知道是UGUI和粒子特效的显示层级问题,但头一回遇到…

📰

Unity渲染排序深度解析:MeshRenderer的SortingLayer与Order in Layer实战

做Unity项目的时候,最让人挠头的往往不是玩法逻辑,而是渲染排序。MeshRenderer的渲染排序问题看起来简单,实际坑起来能让人怀疑人生:3D角色明明站在塔后面,却被塔盖住;粒子特效明明发射了,却被建…

📰

Chrome黑暗模式四大实现方案与底层渲染原理

1. 为什么Chrome原生不提供“一键黑暗模式”开关?这4种方法背后是浏览器渲染机制的博弈你打开Chrome,翻遍设置菜单,找不到那个熟悉的“深色主题”滑块——不是你眼花了,而是Google从Chrome 76开始就刻意把系统级黑暗模式支持做成了…

📰

LightC 如何判断卸载残留?14项信号置信度评分算法源码级解读

LightC 如何判断卸载残留?14项信号置信度评分算法源码级解读 【免费下载链接】light-c A free, minimalist, lightweight, and high-performance C-drive cleanup tool. 项目地址: https://gitcode.com/gh_mirrors/li/light-c 你是否好奇免费极简的 LightC C…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬