当前位置: 代码网 > it编程>前端脚本>Vue.js > vue3的reactive赋值问题解决

vue3的reactive赋值问题解决

2024年05月15日 Vue.js 我要评论
问题vue3中直接对reactive声明的变量本身进行赋值是无效的。筛选表单重置功能// 数据结构let filterform = reactive({ createdate: null, q:

问题

vue3中直接对reactive声明的变量本身进行赋值是无效的。

筛选表单重置功能

// 数据结构
let filterform = reactive({
  createdate: null,
  q: null
})

起初我的做法是直接给filterform变量赋值。

function reset() {
  filterform = {
    createdate: null,
    q: null
  }
}

写完之后发现无效,便改成了单个数据置空,此时生效了。

function reset() {
  filterform.createdate = null
  filterform.q = null
}

弹窗数据回显

const props = defineprops({
  visible: {
    type: boolean,
    default: false
  },
  data: {
    type: object,
    default: {}
  }
})

let visible = ref(false)
let modaldata = reactive({})

我的逻辑:监听visible变量,如果弹窗显示,则将数据回显。

我的做法是:把props.data结构赋值给modaldata变量,结果没有生效,我用vue插件查看,插件显示modaldata变量是一个空对象。

用console.log打印,发现数据是有值的。

watch{
  () => props.visible,
  (val) => {
    if(val) {
      modaldata = { ...props.data }
    }
    visible = val
  }
}

查了下资料,发现直接给reactive声明的变量本身赋值是没有效果的。

于是我便给modaldata里面又嵌套了一层data。

let modaldata = reactive({
  data: {}
})

watch{
  () => props.visible,
  (val) => {
    if(val) {
      modaldata.data = { ...props.data }
    }
    visible = val
  }
}

解决方案

单个赋值

let formdata = reactive({
  updatedate: null
})

formdata.updatedate = '2023-7-10'

function reset() {
	formdata.updatedate = null
}

多嵌套一层

const props = defineprops({
  data:{
    type: object,
    default: {}
  }
})

const modaldata = reactive({
  data:{}
})

modaldata.data = { ...props.data }

补充

在查阅资源时,发现reavtive声明的数组变量,赋值时也同样有问题。

如果需要清空数组,不能直接赋值一个空数组,而是要将数组长度设置为 0。

let arr = reactive([])

// 错误写法
arr = []

// 正确写法
arr.length = 0

到此这篇关于vue3的reactive赋值问题解决的文章就介绍到这了,更多相关vue3 reactive赋值内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com