alibaba / formily

📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3
https://formilyjs.org/
MIT License
11.12k stars 1.44k forks source link

[Bug Report] 字段有依赖关系时,出现删除异常问题 #3979

Closed 007sair closed 9 months ago

007sair commented 10 months ago

Reproduction link

Edit on CodeSandbox

Steps to reproduce

点击radio字段最右侧的删除按钮

What is expected?

label-1应该从form.values中被删除

What is actually happening?

label-1并未被完全删除,而是仍然存在data字段。 label-2可被正常删除。

Package

@formily/core@2.2.29


这个问题不能完全算bug,出现问题的原因猜测是form.deleteValuesIn已经生效,字段也确实被删除。 但是由于label-1中的data字段依赖了其他字段,在删除后又触发了一次value的表达式执行,导致data被set了。

目前解决的办法时给依赖加个when(代码中items.ts中有注释),在没有依赖字段时就不会执行value中的表达式。

这样虽然可以解决问题,但是在某些极端情况下(比如给value赋值,value存在scope的函数时还是会复现) 所以,提这个问题是想看看大佬们能否从删除时机,根本上解决这个问题。

janryWang commented 9 months ago

看了下,并不是什么 bug 行为,因为你配置的联动是没有条件的,那就是所有情况都会触发,包含你手动删除引发的联动也会触发,所以加一个 when 来排除这个触发条件没问题,不过从你这个需求来看,貌似就是单纯为了冗余一些数据给服务端,也不是为了 UI 层面上做展示,建议直接在 submit 的时候处理就行了