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.26k stars 1.46k forks source link

[Bug Report] ArrayField method will throw error and break #3932

Closed csc-bo closed 10 months ago

csc-bo commented 1 year ago

Reproduction link

Edit on CodeSandbox

Steps to reproduce

第一步:加载10w数据 第二步:点到最后一页 第三步:点回第一页点击下面Insert键,就会崩溃

What is expected?

无论怎么翻页,调用ArrayField的method可以正常的添加数据

What is actually happening?

跳过中间的页面翻页,会导致前面的页面添加数据失败

Package

@formily/core@2.2.29


数据的量不重要,中间跳过的页面没有加载过可能是导致错误的原因 if (field.match(_this.pattern)) 这里报错 TypeError: Cannot read properties of undefined (reading 'match')

var Query = /* @class /function () { function Query(props) { var _this = this; this.addresses = []; this.pattern = _formily_sharedWEBPACK_IMPORTED_MODULE_0.FormPath.parse(props.pattern, props.base); this.form = props.form; if (!this.pattern.isMatchPattern) { var matched = takeMatchPattern(this.form, this.pattern.haveRelativePattern ? (0,_shared_internalsWEBPACK_IMPORTED_MODULE_1.buildDataPath)(props.form.fields, this.pattern) : this.pattern); if (matched) { this.addresses = [matched]; } } else { (0,_formily_shared__WEBPACK_IMPORTED_MODULE_0__.each)(this.form.fields, function (field, address) { if (field.match(_this.pattern)) { _this.addresses.push(address); } }); } } Query.prototype.take = function (taker) { return output(this.form.fields[this.addresses[0]], taker); };