Open fanfanyir opened 8 months ago
这个问题发生在 ArrayField 往数组中间insert的时候,向数组尾部添加不会触发该问题。
该 issue 中的 case 在 ArrayField 执行 spliceArrayState
方法的时候,分别发生以下情况:
Form.createField()
生成。此时Path 对象由 FormPath.parse('array').concat(1)
生成,因此segment的值为 ['array', 1]
moveIndex
方法生成 fieldPatch。fieldPatch 使用 identifier 作为 address ,identifier为字符串 "array.2"
,丢失了数组下标的类型,因此 segment 的值为['array', '2']
。https://github.com/alibaba/formily/blob/4dc50bce7a0923dab1a02e1d6036ee9fa6e215b2/packages/core/src/shared/internals.ts#L399-L407
@janryWang 我尝试将 moveIndex 的返回改成 FormPath.parse(preStr).concat(index)
, 但是会破坏 interface INodePatch
的声明,INodePath 中的address 都是字符串类型,白总看看这个能改成Pattern 类型吗,或者还是考虑别的解决办法?
Is there any update on this issue?
Reproduction link
Steps to reproduce
What is expected?
// 0 : ['array'] // 1: (2) ['array', 0] // 2: (2) ['array', 1] // 3: (2) ['array', 2]
What is actually happening?
// 0 : ['array'] // 1: (2) ['array', 0] // 2: (2) ['array', '2'] // 3: (2) ['array', 1]
Package
@formily/react@2.3.1