Javascript 获取错误:";无法读取属性';长度';“未定义”的定义;仅在生产设置中
vue版本:2.1.1 我仅在生产设置中遇到以下错误: TypeError:无法读取未定义的属性“length” 在s.updated(vue.common.js:6077) 在we(vue.common.js:2754) 在De(vue.common.js:2831) 在阵列上。(vue.common.js:473) 在e(vue.common.js:422) 这在本地设置中非常有效,但只有在生产环境中才会出现此错误。当我从chrome控制台转到Javascript 获取错误:";无法读取属性';长度';“未定义”的定义;仅在生产设置中,javascript,vue.js,vuejs2,vue-component,Javascript,Vue.js,Vuejs2,Vue Component,vue版本:2.1.1 我仅在生产设置中遇到以下错误: TypeError:无法读取未定义的属性“length” 在s.updated(vue.common.js:6077) 在we(vue.common.js:2754) 在De(vue.common.js:2831) 在阵列上。(vue.common.js:473) 在e(vue.common.js:422) 这在本地设置中非常有效,但只有在生产环境中才会出现此错误。当我从chrome控制台转到s.updated(vue.common.js:
s.updated(vue.common.js:6077)
行时,我得到以下代码:
var TransitionGroup = {
props: props,
render: function render (h) {
var tag = this.tag || this.$vnode.data.tag || 'span';
var map = Object.create(null);
var prevChildren = this.prevChildren = this.children;
var rawChildren = this.$slots.default || [];
var children = this.children = [];
var transitionData = extractTransitionData(this);
for (var i = 0; i < rawChildren.length; i++) {
var c = rawChildren[i];
if (c.tag) {
if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
children.push(c);
map[c.key] = c
;(c.data || (c.data = {})).transition = transitionData;
} else if (process.env.NODE_ENV !== 'production') {
var opts = c.componentOptions;
var name = opts
? (opts.Ctor.options.name || opts.tag)
: c.tag;
warn(("<transition-group> children must be keyed: <" + name + ">"));
}
}
}
if (prevChildren) {
var kept = [];
var removed = [];
for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {
var c$1 = prevChildren[i$1];
c$1.data.transition = transitionData;
c$1.data.pos = c$1.elm.getBoundingClientRect();
if (map[c$1.key]) {
kept.push(c$1);
} else {
removed.push(c$1);
}
}
this.kept = h(tag, null, kept);
this.removed = removed;
}
return h(tag, null, children)
},
beforeUpdate: function beforeUpdate () {
// force removing pass
this.__patch__(
this._vnode,
this.kept,
false, // hydrating
true // removeOnly (!important, avoids unnecessary moves)
);
this._vnode = this.kept;
},
updated: function updated () {
var children = this.prevChildren;
var moveClass = this.moveClass || ((this.name || 'v') + '-move');
if (!children.length || !this.hasMove(children[0].elm, moveClass)) { // <=== This is the line throwing error
return
}
这里prods是作为道具传递给该组件的静态数据。我升级到了最新版本:
2.2.1
,升级后没有看到错误,似乎他们已经在该版本中修复了该错误。在访问长度之前确保子项存在
改变
if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
到
对我来说,我意外地在一个转换组中有一个孩子,这会导致错误。我只在有多个孩子的情况下使用过渡组,这就解决了问题
只有当我们尝试转到另一个页面,触发update()
时,错误才会出现。prevChildren
是未定义的或这不应该是使用转换组的代码,似乎您尝试设置动画的元素不存在,当组件(节点树)与实际文档树分离时,可能会发生这种情况。@是的,但为什么这可能只在生产中出现,我仍然添加了相关代码。2.2.6-错误仍然存在。我在页面上获得了带有移动动画的对象
if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
if (!children || !children.length || !this.hasMove(children[0].elm, moveClass)) {