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.32k stars 1.48k forks source link

[Bug Report] batch 批量赋值时字段x-visible没有正确联动 #3666

Open Grapedge opened 1 year ago

Grapedge commented 1 year ago

Reproduction link

Edit on CodeSandbox

Steps to reproduce

可见性(x-visible)联动条件:

使用 batch 赋值字段:

batch(() => {
  Object.assign(field.value, {
    fieldB: 'fieldB',
    fieldC: 'fieldC',
    fieldA: 'fieldA',
  })
})

What is expected?

期望 fieldA, fieldB, fieldC 全部展示出来

What is actually happening?

只展示了 fieldA, fieldB。

Package

@formily/reactive@2.2.16


  1. 如果不使用 batch,展示是正确的。
  2. 如果将 batch 写法里的对象 key 调整为 fieldA,fieldB,fieldC 的顺序,也是正确的(但明显不应该依赖 key 的顺序):
batch(() => {
  Object.assign(field.value, {
    fieldA: 'fieldA',
    fieldB: 'fieldB',
    fieldC: 'fieldC',
  })
})
dozedoze commented 1 year ago

我是这样解决的 schema上 把被动改成主动 联动: fieldA: 当 fieldA 的有值为 "fieldB" 时显示 fieldB: 当 fieldB 的值为 "fieldC" 时显示