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.48k stars 1.49k forks source link

[Bug Report] ArrayCollapse.useIndex 无法实时获取到对应的index #3736

Closed cizhaYang closed 1 year ago

cizhaYang commented 1 year ago

Reproduction link

https://codesandbox.io/s/charming-bush-qobvpm?file=/App.tsx

Steps to reproduce

比如说现在开始添加1,2,3,4项

然后我把中间的3给删除了

结果就变成useIndex 就是1,2,4

What is expected?

期望变成1,2,3

What is actually happening?

这是我的代码 "x-component-props": { header: "{{ '' + (ArrayCollapse.useIndex())}}", expandIconPosition: "end", showArrow: false, extra: '{{ GetIcon("icon-a-chevronDown") }}' },

我是自定义header,在这里获取ArrayCollapse.useIndex()索引值,结果就是1,2,4,不能按照正常的顺序展示

Package

@formily/antd@2.1.4


lumdzeehol commented 1 year ago

提供一个最小复现链接吧

cizhaYang commented 1 year ago

https://codesandbox.io/s/charming-bush-qobvpm?file=/App.tsx

image 在这里获取ArrayCollapse.useIndex()会出问题

janryWang commented 1 year ago

不要在 表达式里用 React Hook,只能在组件内部使用

cizhaYang commented 1 year ago

不要在 表达式里用 React Hook,只能在组件内部使用

能不能给个使用的例子啊 不太会用

Laurieliuren commented 1 year ago

求使用例子,官网看的一脸懵逼

Laurieliuren commented 1 year ago

爬坑经验,给后来的老铁们参考,通过在x-reactions捣鼓一下,可以定制内容(Step 1: ):

items: { type: 'object', 'x-component': 'ArrayCollapse.CollapsePanel', 'x-component-props': {}, properties: { index: { type: 'void', // 'x-component': 'ArrayCollapse.Index', 'x-reactions': [ { fulfill: { run: let state = $self.getState(); let path = state.path; const index = Number(path.split('.')[1]) + 1; const prefix = 'Step ' + index + ': '; let preHeader = $form.getFieldState(path.split('.index')[0]).component[1].header || ''; if(preHeader.includes(':')) { preHeader = preHeader.split(': ')[1] || ''; } $form.getFieldState(path.split('.index')[0]).component[1].header = prefix + preHeader; , }, }, ], } }

Laurieliuren commented 1 year ago

这个是JSON Schema格式的

shwzh commented 8 months ago

这 $self 从哪里获取的