前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue中的set、delete方法在列表渲染中的使用

Vue中的set、delete方法在列表渲染中的使用

作者头像
砖业洋__
发布2023-05-06 20:02:23
3.2K0
发布2023-05-06 20:02:23
举报
文章被收录于专栏:博客迁移同步博客迁移同步

不知大家是否有过类似的经历,比如说for循环渲染数组或者对象中的数据,渲染完成后,给数组或者对象添加、修改、删除数据后却没有在页面中渲染出来。

本篇就是来解释说明修改数组和对象数据视图立马更新的问题,要掌握各种情况和set、delete方法的使用

数组中数据渲染后的修改、新增、删除问题

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>list渲染中的问题
        </title>
        <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
        <div id="app">
            <div v-for="(item, index) of list" :key="item.id">
                {{item.text}} ---- {{index}}
            </div>
        </div>
        <script> 
            var vm = new Vue({
                el: "#app",
                data: {
                    list:[{
                        id:"001",
                        text:"hello"
                    }, {
                        id:"002",
                        text:"lll"
                    }, {
                        id:"003",
                        text:"ccc"
                    }]
                },
            })
        </script>
    </body>
</html>

运行结果

如果我们想看看添加数据是不是会继续渲染到界面中应该怎么做呢?

控制台输入list的push方法

这样是可以渲染到界面上的

结果我们继续添加list数据的数据,却发现没有渲染在界面上

从结构上看起来添加的不是响应式的数据, Vue 无法探测普通的新增属性

 我们不能通过数组下标的形式操作数组,直接修改新增删除都是无法触发视图更新的,数据变了页面是不会跟着变的,如果想直接操作数组必须通过数组的7个api方法去操作才可以,分别是push、pop、shift、unshift、splice、sort、reverse

修改可以splice,新增可以push、unshift、splice,根据需要使用、删除可以splice、unshift、pop,根据需要使用

或者直接改引用,让数组指向另一个内存空间,如下

或者用Vue的set方法去新增、修改数据,用Vue的delete方法去删除数据

也可以用Vue.delete(vm.list, 1);//删除下标为1位置的数据

 当然,set方法和delete方法不仅仅是Vue中的全局方法,也是实例方法,这个我们放在第二个例子讲解。

综上所述,数组要能直接触发视图更新在页面上渲染出来的方法

1.利用数组的api方法

2.改变数组指向的内存地址(改引用)

3.利用Vue的set、delete方法操作数组(推荐)

对象中数据渲染后的修改、新增、删除问题

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>对象数据渲染问题
        </title>
        <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
        <div id="app">
            <div v-for="item of userInfo">
                {{item}}
            </div>
        </div>
        <script> 
            var vm = new Vue({
                el: "#app",
                data: {
                    userInfo: 
                    {
                        name:"lcy",
                        age:25,
                        gender:"male",
                        salary:"secret"
                    }

                }
            })
        </script>
    </body>
</html>

运行结果

我们来尝试修改一下数据试试

看来这里仅仅可以修改对象里面已存在属性的数据触发更新,比数组强了点,数组修改数据也无法触发视图更新。

我们根据数组修改数据可以知道,要想触发视图更新,我们可以改变内存地址,比如这里的userInfo对象修改如下

这还却是可以,但是我们一般都不会去更改对象,我们可以用Vue.set方法来改变数据

删除可以用Vue.delete(vm.userInfo, 'age'),如图,age属性就没了

想用set方法直接设置为""或者undefined是无效的,只是赋值,但是对象属性还在

当然,set和delete不仅是Vue上面的全局方法,也是一个实例方法

比如Vue.set(vm.userInfo, "address", "shenzhen"); // 新增属性

等同于vm.$set(vm.userInfo, "address", "shenzhen");

比如Vue.delete(vm.userInfo, "age")

等同于vm.$delete(vm.userInfo, "age")

经过我的测试这都是可以的,根据需要使用

综上所述

虽然修改数组、对象中的数据都可以直接改变引用地址实现,但是不推荐。

直接修改数据的方法就是对象可以,数组不可以,但是这种操作不考虑,也不要用这种方法去打擦边球。

更加推荐的是利用Vue中的set、delete方法去实现修改、新增、删除数据。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组中数据渲染后的修改、新增、删除问题
  • 对象中数据渲染后的修改、新增、删除问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档