理解mobx @computed、autorun、get函数

本文通过两个实例详细介绍了MobX中observable、computed及autorun的功能与使用技巧,对比computed与普通getter的区别,并探讨如何利用这些特性简化状态管理和响应式编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一篇博客记录一下刚工作时思考的问题。

1.首先看第一个例子:

const number = observable(10);
const plus = computed(() => number.get() > 0);

autorun(() => {
  console.log(plus.get());
});
// true
number.set(-19);//false 
number.set(-1);
number.set(1);//true

(1) autorun 和 @computed 都会根据所观察的变量发生变化的时候触发

(2) @computed所计算得到的新值可以observable

2. 第二个例子

class Test {
    @observable firstName = 'first'
    @observable lastName = 'last'

    @computed
    get fullName () {
        return `${this.firstName} ${this.lastName}`
    }

    getFullName () {
        return `${this.firstName} ${this.lastName}`
    }
}

const test = new Test()
autorun(() => {
    console.log('computed:', test.fullName)
})

autorun(() => {
    console.log('getter:', test.getFullName())
})

// computed: first last
// getter: first last

test.firstName = 'salmon'
// computed: salmon last
// getter: salmon last

test.lastName = 'sushi'
// computed: salmon sushi
// getter: salmon sushi

test.firstName = 'salmon'
// 无输出
test.getFullName();
// salmon sushi

当变量没有发生变化时是不会触发autorun 和 @computed

虽然普通的get函数能与autorun配合达到与@computed相同的效果,但是有两个特点:

(1)无法产生新的可observable的值

(2)可以直接调用

mobx的@computed跟vue的computed属性类似

参考链接:

https://blog.youkuaiyun.com/cqm1994617/article/details/53271494

https://github.com/mobxjs/mobx/issues/161

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值