reactjs - 根据 react-final-form 的更改更新表单值的简单方法
问题描述
我正在尝试使用react-final-form和material-ui实现一个具有两个连续依赖 Select 的表单
要求
- 这两个字段都是必需的
- 当用户选择国家值时
- 城市字段应重置为空白
- 城市字段不应标记为无效
- 用户应该能够随时完全重置表单
我很难用 react-final-form API 找到一个简单而优雅的解决方案来满足这个要求。
可能有使用mutators、react-final-form-listeners或decorators的方法,但在我看来,这似乎是一个常见的表单用例,没有高级 API 的简单解决方案会很好。
这是一个结合了FormSpy
组件、useRef
钩子和form.reset
api 的版本。
https://codesandbox.io/embed/react-final-form-material-ui-field-dependencies-hn7ps
onChange
通过FormSpy属性订阅表单值- 每次值更改时更新一个反应参考
- 将 ref 值与新值进行比较,并使用
form.reset
API 重置 city 字段值而不触发验证
这是另一个使用声明表单规则方法的版本,react-final-form-listeners
就像 Erik 建议的那样。
https://codesandbox.io/embed/react-final-form-material-ui-field-dependencies-ijxd0
它要简单得多,因为我们不需要 react ref 和 FormSpy。
这两种解决方案几乎都能完美运行,只是该form.reset
方法initialValues
在后台重新定义了表单,因此 RESET 按钮不再将表单重置为原始表单initialValues
。
是否有内置方法来挂钩表单状态更改并比较旧/新值?
解决方案
也许声明式表单规则是您需要的?
推荐阅读
- apache-kafka - 如何在 Spring webflux 和 Kafka 中创建 Bulk 消费者
- javascript - Chrome onbeforeunload 事件不会创建确认模式
- string - 从 hive 中的字符串值计算季度
- r - 更快地选择随机列值
- reactjs - Reactjs useMemo 钩子行为,如 componentDidMount
- python - 如何在此代码中使用数据框执行 if 语句?
- python - Numpy 向量/矩阵乘法意外工作
- django - Django 基于类的视图返回 HttpResponse 如 HttpResponseBadRequest
- javascript - 如何在 React 中为 JSON 数据表创建搜索过滤器?
- python - 通过 div/span 格式的 xpath 查找/定位可点击文本