ant-design-mobile
ant-design-mobile copied to clipboard
增加 Form.Watch 组件,废弃掉 Form.Subscribe
Version of antd-mobile
5.14.3
Description
来自: https://github.com/ant-design/ant-design-mobile/issues/5275#issuecomment-1151175123
为什么要弃用 Subscribe 呢,Watch 组件不能够完全替代 Subscribe。我是觉得可以共存的
差异
- 监听参数个数。 Watch组件只能监听一个参数,Subscribe 可以监听多个
- 初始值差异。Watch组件没办法获取初始值,第一次肯定是 undefined。但 Subscribe 渲染的时候可以获取到初始值
{props.children(props.to, form)}
<Watcher />
Subscribe 底层基于 useWatch,渲染次数与 useWatch 应该是一样的。而且多个监听同时变化的话存在更新合并的情况,性能上不会有多少差距。
主要是考虑到命名统一性,如果既有 useWatch 又有 Form.Subscribe,会不会用户感觉比较迷惑
如果能统一成 useWatch 和 Form.Watch 的话,心智成本会低一些
至于初始值的问题,肯定是可以解决的,第一次渲染的时候不会让用户拿到 undefined 的
我先标个 uncertain 吧
目前 Form.Subscribe 是支持订阅多个 namePath
假如说要改成 Form.Watch,那:
- 如果
Form.Watch也支持订阅多个namePath,那和useWatch就不一致了,可能会有很多用户被坑到 - 如果
Form.Watch只支持订阅单个namePath,那功能上会有些弱,需要同时订阅多个字段的话就只能手动嵌套好几层的Form.Watch,确实挺恶心
这个目前看起来的确是个问题……?
我会推动 field-form 的 useWatch 加一个 useWatches 的。。。
我会推动 field-form 的 useWatch 加一个 useWatches 的。。。
建议: 使用 useWatch([], form) ,第1个字段使用数组,不需要新增函数名;
若是:单个字符串,就选择 监听该item 若是:数组,如果数组为空,代表监听form的所有item 数组,并且有具体的值,则只监听form对应填写的item