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),仅供参考

相关新闻

snapDOM 完整实战指南:高性能 DOM 截图与导出,一文看懂怎么用

snapDOM 完整实战指南:高性能 DOM 截图与导出,一文看懂怎么用

snapDOM 完整实战指南:高性能 DOM 截图与导出,一文看懂怎么用 【免费下载链接】snapdom High-performance engine for capturing, modifying, and converting DOM elements into any format. 项目地址: https://gitcode.com/GitHub_Trending/sn/snapdo…

2026/8/16 17:48:32 阅读更多 →
从生肉到熟肉,XUnity.AutoTranslator游戏实时翻译插件实战全攻略

从生肉到熟肉,XUnity.AutoTranslator游戏实时翻译插件实战全攻略

从生肉到熟肉,XUnity.AutoTranslator游戏实时翻译插件实战全攻略 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 半夜两点,你终于下完心心念念的日文 RPG,兴冲冲点开游…

2026/8/17 17:57:10 阅读更多 →
收盘后自动运行选股策略:配合 APScheduler 实现定时行情抓取与分析

收盘后自动运行选股策略:配合 APScheduler 实现定时行情抓取与分析

📌 摘要 / 快速解答 通过 APScheduler 定时调度框架与 QuantDash Python SDK 的结合,开发者可以用极简代码实现收盘后自动拉取多市场行情数据并执行选股策略。QuantDash 提供统一的 A股/美股/港股 K线接口(如 .SH、.SZ、.US、.HK)…

2026/8/16 17:48:32 阅读更多 →

最新新闻

网盘下载助手LinkSwift完全上手指南:一次安装,九大网盘直链解析全搞定

网盘下载助手LinkSwift完全上手指南:一次安装,九大网盘直链解析全搞定

网盘下载助手LinkSwift完全上手指南:一次安装,九大网盘直链解析全搞定 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里…

2026/8/17 20:08:23 阅读更多 →
淘金币自动执行脚本上手指南:每天3分钟跑完淘宝全部任务,手把手从零配置到调优

淘金币自动执行脚本上手指南:每天3分钟跑完淘宝全部任务,手把手从零配置到调优

淘金币自动执行脚本上手指南:每天3分钟跑完淘宝全部任务,手把手从零配置到调优 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.co…

2026/8/17 20:08:23 阅读更多 →
FF14副本动画一键跳过:辍学插件从零上手的完整实战指南

FF14副本动画一键跳过:辍学插件从零上手的完整实战指南

FF14副本动画一键跳过:辍学插件从零上手的完整实战指南 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还记得上周陪固定队刷冬瓜煲吗?连续三把,每把开场都得老老实实…

2026/8/17 20:08:23 阅读更多 →
C4996错误解析:从缓冲区溢出到安全输入实践

C4996错误解析:从缓冲区溢出到安全输入实践

1. 从C4996报错说起:一个老C程序员的“安全”烦恼如果你刚开始学C语言,或者正用着Visual Studio(VS)写一个老项目,大概率会撞上这个让人有点恼火的错误:C4996。编译器用红色波浪线或者醒目的错误信息告诉你…

2026/8/17 20:08:23 阅读更多 →
【AI黑话日日新】Day 009|Prompt Engineering(提示词工程)

【AI黑话日日新】Day 009|Prompt Engineering(提示词工程)

day: 9 date: 2026-08-16 keyword_en: Prompt Engineering keyword_zh: 提示词工程 category: 智能体与上下文 reading_time: 8 一句话说清:提示词工程就是研究“怎么把话说清楚,让 AI 给出你想要的答案”,而不去改模型本身。 1. 它到底在说什么 Prompt Engineering(提示词…

2026/8/17 20:08:23 阅读更多 →
Python数据分析入门:Pandas安装全攻略与最佳实践

Python数据分析入门:Pandas安装全攻略与最佳实践

1. 项目概述:为什么Pandas的安装值得单独写一篇笔记?如果你刚开始接触Python数据分析,或者从其他语言转过来,可能会觉得“安装一个包”有什么好讲的?pip install pandas一行命令不就完事了吗?我最初也是这么…

2026/8/17 20:07:23 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →