Avoid adding reactive properties to a Vue instance or its root $data at runtime - declar
大家好我是王超朋:想更快更有效率的结局bug,那就必须迅速的定位问题,找出和原因,但是我们在使用第三方框架时,有是有的bug让人找不到眉目.最简单的办法,就是吧他们的源码阅读一遍.咋们看一下抛出该异常的代码块:/**vue.$set 函数*/function set (target , key, val) {// 在生产模式下,isPrimitive是不是基本类型,if (process.env.
·
大家好我是王超朋:
想更快更有效率的结局bug,那就必须迅速的定位问题,找出和原因,但是我们在使用第三方框架时,有是有的bug让人找不到眉目.最简单的办法,就是吧他们的源码阅读一遍.
咋们看一下抛出该异常的代码块:
/**
vue.$set 函数
*/
function set (target , key, val) {
// 在生产模式下,isPrimitive是不是基本类型,
if (process.env.NODE_ENV !== 'production' &&
(isUndef(target) || isPrimitive(target))
) {
warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
}
// target 如果是数组,那么替换当前key位置的值为val 并返回vale
if (Array.isArray(target) && isValidArrayIndex(key)) {
target.length = Math.max(target.length, key);
target.splice(key, 1, val);
return val
}
//判断key是不是target 的属性, 并且该属性不能为保留字
if (key in target && !(key in Object.prototype)) {
target[key] = val;
return val
}
var ob = (target).__ob__;
// 是否为
if (target._isVue || (ob && ob.vmCount)) {
process.env.NODE_ENV !== 'production' && warn(
'Avoid adding reactive properties to a Vue instance or its root $data ' +
'at runtime - declare it upfront in the data option.'
);
return val
}
if (!ob) {
target[key] = val;
return val
}
defineReactive$$1(ob.value, key, val);
ob.dep.notify();
return val
}
代码告诉我出现该BUG的原因,
第一传入的target 参数是vue的实例;也就是说
this.$set(this,name,'wcp'); 这段代码会抛出异常
第二 :
传入的对象为父组件内在data 中声明的对象;
props:['obj'];
this.$set(obj,'name','wcp'); 这段代码抛出异常
更多推荐
已为社区贡献1条内容
所有评论(0)