vue3的响应式赋值中数组array,对象object,集合set的重新赋值怎么操作,问过Chatgpt的答案

这篇具有很好参考价值的文章主要介绍了vue3的响应式赋值中数组array,对象object,集合set的重新赋值怎么操作,问过Chatgpt的答案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3的响应式赋值中数组array,对象object,集合set的重新赋值怎么操作,问过Chatgpt的答案,HTML前端,vue.js,前端,javascript

vue3和ts结合开发的时候,总是会遇到引用数据类型的重新赋值的情况,但是在vue3中,又不能使用直接赋值的情况,因为会改变proxy的结构,导致响应式失败,那么该如何重新赋值响应式对象数据成为了一个技巧问题,今天它来了

数组Array的响应式赋值

如果是数组的话,踩坑点:**清空数组,然后再重新给数组赋值的时候,发现数组变化了页面没有响应,代码如下:

derwayList = [];

// 或者使用下面的也不行
derwayList = reactive([]);

原因:虽然重新代理了,但是这个数组已经不是页面上的数组,也就不是setup返回出去的那个,通俗来说就是你大爷已经不是你大爷了

正确的使用方式应该是:

//方案一:
derwayList.splice(0, derwayList.length);

//方案二:
derwayList.length = 0;


// 然后使用解构重新赋值
derwayList.push(...newList)

对象Object重新赋值

对于对象不能直接重新赋值原因和数组是一样的,正确的赋值方式应该是

// 对象的响应式
type res = {
  code: number
  data: string[]
  message: string
  state?: string
}
const response: res = reactive({ code: 0, data: [], message: '' })
// 修改对象的值
const editRes = function () {
  response.code = 200
}
// 增加对象的值
const addRed = function () {
  response.state = 'success'
}
// 删除对象的值
const delRes = function () {
  delete response.message
}
// 重新赋值
const newRes = function () {
  const newValue = {
    code: 500,
    data: ['error'],
    message: '出错了'
  }
  Object.assign(response, newValue)
}

集合Set响应式赋值

集合响应式不能重新赋值也是一样的道理,所以集合的重新赋值应该是:

// 集合的重新赋值
const set1 = reactive(new Set(['1', '2', '3']))
// 添加
const addSet = () => {
  set1.add('六')
}

// 删除
const delSet = () => {
  set1.delete('一')
}

// 清空集合
const clsSet = () => {
  set1.clear()
}

// 重新赋值
const newSet = () => {
  const newSet = new Set(['4', '5', '6'])
  set1.clear()
  newSet.forEach((item) => {
    set1.add(item)
  })
}

而且这部分修改我还专门问了chatgpt,但是chatgpt给我的一种方式不知道为什么不起作用,然后我又问它,它告诉我了上面的方式,所以下面的方式可能会不起作用:

const newSet = new Set([4, 5, 6]);
Object.setPrototypeOf(newSet, setCollection); // 继承原始的 Set 实例

vue3的响应式赋值中数组array,对象object,集合set的重新赋值怎么操作,问过Chatgpt的答案,HTML前端,vue.js,前端,javascript文章来源地址https://www.toymoban.com/news/detail-616187.html

到了这里,关于vue3的响应式赋值中数组array,对象object,集合set的重新赋值怎么操作,问过Chatgpt的答案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 ref reactive响应式数据 赋值的问题

    doing 遇见就记录,最后更新时间23.8.30 错误示范:直接赋值 以数组为例,对象也是一样的操作。 ref 定义的属性等价于 reactive({value:xxx}) ,所以 reactive、ref 直接重新赋值丢失响应是因为引用地址变了 正确写法 方法1: ref.value ,代码中更为清晰地表明响应式数据 方法2:包一层

    2024年02月10日
    浏览(35)
  • 【Vue3】Vue3中reactive变量重新赋值无法响应的三种处理方法(已解决)

    1、html 2、定义reactive变量 3、重新赋值   1、html 2、定义ref变量 3、赋值 第三种方案:push(不推荐)

    2024年02月15日
    浏览(35)
  • 解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?

    我们需要在vue3中使用服务器的数据渲染到页面上,我使用的是reactive生成的响应式数据属性,但是在挂载后请求的数据并没有渲染显示到页面上。 技术: vue3 、 element-ui-plus home.vue 我们通过直接赋值,可以看出数据变为普通的数据了,并不是响应式的。 代码如下: 可以看出

    2023年04月26日
    浏览(34)
  • vue3 中reative 值为数组时如何重新赋值

    采用这种方式const tableData = reactive([]);定义的时候,不能直接赋值,这样的话就不能响应。需要利用push的方式。 const tableDataObj = reactive({listobj:[]}); 这中定义的可以直接赋值即可   参考 Vue3实践指南:使用reactive函数声明数组如何正确赋值响应式、script setup语法糖中toRefs如何优

    2024年02月10日
    浏览(23)
  • vue3 - 使用reactive定义响应式数据进行列表赋值时,视图没有更新的解决方案

    在Vue 3.0 中我们使用 reactive() 定义的响应式数据的时候,当是一个数组或对象时,我们直接进行赋值,发现数据已经修改成功,但是页⾯并没有自动渲染成最新的数据;这是为什么呢? 就如同官网所说的reactive存在一些 局限性 :(官方的描述) 原因就是reactive函数会返回一个

    2024年02月13日
    浏览(42)
  • vue3 响应式对象的 api 详解

    Ⅰ. ref、reactive ( 递归监听 ) ref 对象 在 html 模板中会 自动添加 value ( ref 对象中__v_isRef:true 进行判断的 ) ref 对象 = reactive( { value:0 } ) 底层自动转换为 reactive 最终 基本数据 类型采用 = ( Object.defineProperty ) , 引用数据 类型采用 = ( proxy 代理 ) Ⅱ. isRef、isReactive ( 判断 ) 用于判断

    2023年04月17日
    浏览(30)
  • vue3 reactive包裹数组无法页面无法响应式

    原代码如下: 此时removeItem方法运行,打印出historyAccount的值确实被改变了,但是页面还是没有变化 原因: 如果你直接通过赋值的方式改变 reactive 对象引用的数组,是不会触发视图的更新的,应该使用 Vue 提供的响应式方法来更新响应式数据。  改进:可以利用splice方法删除

    2024年04月09日
    浏览(32)
  • 【Vue3】使用ref与reactive创建响应式对象

    💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互

    2024年02月21日
    浏览(40)
  • 已解决:Vue改变数据后界面不自动渲染,Vue中使用v-for遍历对象数组,当给其中某个元素对象重新赋值之后,页面组件列表没有渲染更新。

    问题如标题所说,Vue中使用v-for遍历对象数组,当给数组其中某个元素对象重新赋值之后,页面组件列表没有及时更新渲染,而是在页面进行了其他的渲染操作以后列表才更新出来新的数据,那同样给对象内的属性值赋值也可能存在不渲染的情况,一并解决,尤其发生在网络

    2024年02月06日
    浏览(41)
  • Vue3 watch 监听对象数组中对象的特定属性

    在 Vue 3 中,可以使用 watch 函数来监听对象数组中对象的特定属性。可以通过在回调函数中遍历数组来检查对象的特定属性是否发生变化,并在变化发生时执行相应的操作。 例如,假设有一个名为 items 的对象数组,其中每个对象都有一个名为 checked 的布尔属性和一个名为 n

    2023年04月20日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包