Vue:filter、方法、computed和watch的自我理解和整合

最近一直在用,感觉有些 data,用filter可以,用自定义方法也行。有些数据呢,用computed能实现,用watch也可以。很是疑惑,到底各个方式有何优缺点呢?我这样的使用方式是不是符合约定的场景?详看了官网,度娘了好久,整理如下。

一、四种方式代码走查
  • filters:访问不到vue 实例,帮助我们对数据进行筛选、数据格式化

    filters:{
    absPercent: function (value, key) {
    return value && value[key] && Math.abs(value[key])
    },
    }

  • methods:可以访问vue 实例,其他同filters

    methods:{
    absPercent: function (value, key) {
    return value && value[key] && Math.abs(value[key])
    },
    }

  • computed:不能传参,只能监听现有属性,属性依赖改变,自动调用对应的方法

    computed: {
    panels: function () {
    return [
    {
    label: this.billDate + “包周期账单详情”,
    name: “cycle”,
    },
    {
    label: this.billDate + “按需账单详情”,
    name: “need”,
    },
    {
    label: this.billDate + “资源包扣减详情”,
    name: “resource”,
    },
    ];
    }
    }

  • watch:监听现有属性,属性需要先声明,一旦属性发生了改变就去自动调用对应的方法

    data(){
    return {
    panels: [
    {
    label: “2020-11包周期账单详情”,
    name: “cycle”,
    },
    {
    label: “2020-11按需账单详情”,
    name: “need”,
    },
    {
    label: “2020-11资源包扣减详情”,
    name: “resource”,
    },
    ],
    }
    },
    watch: {
    billDate(newV, oldV) {
    this.panels = [
    {
    label: newV + “包周期账单详情”,
    name: “cycle”,
    },
    {
    label: newV + “按需账单详情”,
    name: “need”,
    },
    {
    label: newV + “资源包扣减详情”,
    name: “resource”,
    },
    ];
    },
    },

二、四种方式详细对比

4种方式对比

三、filterscomputed调用对比
  • 修改相关data值:filterscomputed均会调用,且filters会多次渲染

    filters和computed均会调用

  • 修改不相关data值:调用filters
    修改不相关的data值会调用render函数,render又会重新调用过滤器。这样filters就执行多次了:

    调用filters

参考文章

[Vue–使用watch、computed、filter方法来监控]
[Vue中computed和watch的区别]

Vue.js 中,`watch`、`computed`和`filter` 都是用来处理数据的常用方式。 - `watch`:用于监听一个特定的数据变化,当该数据发生变化时执行相应的操作。`watch` 可以监听一个表达式或一个函数返回值,并在数据变化时执行回调函数。`watch` 通常用于监听数据变化后执行异步操作或复杂的数据处理。 - `computed`:用于计算和返回一个新的数据,当依赖的数据发生变化时自动更新。`computed` 可以监视依赖的数据,当依赖的数据发生变化时,自动更新计算属性的值,因此不需要手动监听数据变化。`computed` 通常用于计算多个数据的复杂逻辑。 - `filter`:用于过滤一个数组中的数据,返回一个新的数组。`filter` 接收一个回调函数,该回调函数返回一个布尔值,用于指示是否保留该数据。`filter` 通常用于从一组数据中筛选需要的数据。 举个例子,如果有一个 `data` 中包含一个 `name` 和一个 `age` 属性,我们可以使用 `watch` 监听 `name` 和 `age` 的变化,并在它们发生变化时执行某些操作: ``` watch: { name: function(newValue, oldValue) { // name 发生变化了 }, age: function(newValue, oldValue) { // age 发生变化了 } } ``` 如果我们想根据 `name` 和 `age` 计算一个新的属性 `fullName`,我们可以使用 `computed`: ``` computed: { fullName: function() { return this.name + ' ' + this.age; } } ``` 如果我们有一个数组 `users` 包含多个用户对象,我们可以使用 `filter` 过滤出年龄大于等于 18 的用户: ``` computed: { adultUsers: function() { return this.users.filter(function(user) { return user.age >= 18; }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆片片

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值