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] field.insert 插入(非第一项和最后一项)内容后,path 内索引下标变成字符串 #4070

Open fanfanyir opened 8 months ago

fanfanyir commented 8 months ago

Reproduction link

Edit on CodeSandbox

Steps to reproduce

  1. 点击 add 添加一项内容
  2. 点击 copy 第一行两次 输出值 // 0 : ['array'] // 1: (2) ['array', 0] // 2: (2) ['array', '2'] // 3: (2) ['array', 1]

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


lumdzeehol commented 7 months ago

这个问题发生在 ArrayField 往数组中间insert的时候,向数组尾部添加不会触发该问题。

该 issue 中的 case 在 ArrayField 执行 spliceArrayState 方法的时候,分别发生以下情况:

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 类型吗,或者还是考虑别的解决办法?

fanfanyir commented 6 months ago

Is there any update on this issue?