Vue.$set失效问题怎么解决
发表于:2024-10-18 作者:千家信息网编辑
千家信息网最后更新 2024年10月18日,这篇"Vue.$set失效问题怎么解决"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2024年10月18日Vue.$set失效问题怎么解决
这篇"Vue.$set失效问题怎么解决"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Vue.$set失效问题怎么解决"文章吧。
Vue.$set失效
有这样一个需求 添加数据过滤用 左边是控件选择 中间是条件 右边是值
因为会根据控件不同渲染不同的值选项控件
{ props:{ props: { type: Object, default: () => ({ prop: "prop", value: "value", type: "type" }) } }, data(){ return { data:{ } } }, methods:{ onValueChange(val){ this.$set(this.data, this.props.value, val) } } //...}
代码片段
由于控件ID的不确定性 所有 data并不能提前预设好key 自然无法响应 所以在onValueChange 使用了this.$set动态添加数据实现响应
复现可以发现 值输入框内的数据并不能实时响应
明明用了$set却不能响应 一番排查后发现只要切换控件后 value值就不能响应 但是只要在切换前随便输入点啥 再切换就没问题
又是一番排查后发现
删除@change事件后故障解决
问题出现在 data[props.value] = ""
遂查看Vue源码
//vue/src/core/observer/index.js 源码片段 /** * Set a property on an object. Adds the new property and * triggers change notification if the property doesn"t * already exist. */export function set (target: Array| Object, key: any, val: any): any { if (process.env.NODE_ENV !== "production" && (isUndef(target) || isPrimitive(target)) ) { warn(`Cannot set reactive property on undefined, null, or primitive value: ${(target: any)}`) } if (Array.isArray(target) && isValidArrayIndex(key)) { target.length = Math.max(target.length, key) target.splice(key, 1, val) return val } if (key in target && !(key in Object.prototype)) { target[key] = val return val } const ob = (target: any).__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(ob.value, key, val) ob.dep.notify() return val}
可以发现 在defineReactive之前 判断了key是否存在于对象之内 若存在就跳过了
坑就在这 多次翻阅Vue.$set文档并未发现$set不能为已存在的key添加监测对象
删除 data[props.value] = "" 改为 onValueChange("") 完美解决问题
以上就是关于"Vue.$set失效问题怎么解决"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
问题
内容
控件
数据
切换
不同
对象
文章
源码
片段
知识
篇文章
输入
不确定性
事件
代码
价值
动态
又是
右边
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
方舟生存进化无法加入联机服务器
浙江网络安全服务价格
车载网络技术优点
数据库安全审计与防护白皮书
windows服务器系统
网络安全标准化的作用
浪潮服务器开机显示器不显示器
单选题网络安全工作的目标
法律服务网络技术研究院
资讯手机软件开发公司
服务器运维可视化软件开发
物业人才的数据库
江西省大学网络技术专业有哪些
未来10年网络安全影响
白山网络安全培训班
高陵区网络安全和信息
未央区软件开发找哪家
外国软件开发金融技术员
网络安全动态防护
高中选修网络技术应用教案
数据库中null表示什么
中概互联网和恒生科技
浪潮服务器开机显示器不显示器
用什么数据库打开gdb
服务器机房用什么虚拟机
数据库关系代数不包括
c数据库多事务处理
sap数据库原理
网络安全强制标准
为超市写一个数据库