ant-design-mobile icon indicating copy to clipboard operation
ant-design-mobile copied to clipboard

增加 Form.Watch 组件,废弃掉 Form.Subscribe

Open awmleer opened this issue 3 years ago • 7 comments

Version of antd-mobile

5.14.3

Description

来自: https://github.com/ant-design/ant-design-mobile/issues/5275#issuecomment-1151175123

awmleer avatar Jun 14 '22 03:06 awmleer

为什么要弃用 Subscribe 呢,Watch 组件不能够完全替代 Subscribe。我是觉得可以共存的

差异

  • 监听参数个数。 Watch组件只能监听一个参数,Subscribe 可以监听多个
  • 初始值差异。Watch组件没办法获取初始值,第一次肯定是 undefined。但 Subscribe 渲染的时候可以获取到初始值
{props.children(props.to, form)}
<Watcher />

Subscribe 底层基于 useWatch,渲染次数与 useWatch 应该是一样的。而且多个监听同时变化的话存在更新合并的情况,性能上不会有多少差距。

IronKinoko avatar Jun 14 '22 06:06 IronKinoko

主要是考虑到命名统一性,如果既有 useWatch 又有 Form.Subscribe,会不会用户感觉比较迷惑

如果能统一成 useWatchForm.Watch 的话,心智成本会低一些

awmleer avatar Jun 14 '22 06:06 awmleer

至于初始值的问题,肯定是可以解决的,第一次渲染的时候不会让用户拿到 undefined

awmleer avatar Jun 14 '22 06:06 awmleer

我先标个 uncertain 吧

awmleer avatar Jun 14 '22 07:06 awmleer

目前 Form.Subscribe 是支持订阅多个 namePath

假如说要改成 Form.Watch,那:

  • 如果 Form.Watch 也支持订阅多个 namePath,那和 useWatch 就不一致了,可能会有很多用户被坑到
  • 如果 Form.Watch 只支持订阅单个 namePath,那功能上会有些弱,需要同时订阅多个字段的话就只能手动嵌套好几层的 Form.Watch,确实挺恶心

这个目前看起来的确是个问题……?

awmleer avatar Jun 14 '22 07:06 awmleer

我会推动 field-form 的 useWatch 加一个 useWatches 的。。。

crazyair avatar Jun 14 '22 07:06 crazyair

我会推动 field-form 的 useWatch 加一个 useWatches 的。。。

建议: 使用 useWatch([], form) ,第1个字段使用数组,不需要新增函数名;

若是:单个字符串,就选择 监听该item 若是:数组,如果数组为空,代表监听form的所有item 数组,并且有具体的值,则只监听form对应填写的item

kemisstep avatar Nov 29 '23 11:11 kemisstep