Mobx Observe困惑

Observe

用法: observe(target, propertyName?, listener, invokeImmediately?)

propertyName: 可选参数,用来指定某个属性进行观察。注意,observe(user.name, listener)observe(user, "name", listener) 根本是完全不同的。前者观察 user.name(或许根本不是一个 observable) 里面的当前值,而后者观察 username 属性。

这个解释就不是很能理解,他的意思是
observe(this.name,()=>{})

observe(this,"name",()=>{})

这两个意思不一样,我想知道这两种写法分别在上面情况下使用呢,我现在一般就是哪个不报错用哪个,所以项目里两种都有,很困惑,求解

阅读 2.3k
1 个回答
  • observe(user.name, listener)监听的是user.name的引用,也就是它的值,它的值可能都不是一个observable
  • observe(user, "name", listener)则监听的就是这个属性

可以试试下面这个实例

import { observable, observe } from 'mobx';

const obj2 = observable({
    a: 1
});

const obj1 = observable({
    a: 1,
    b: obj2
});

const disposerA = observe(obj1, 'a', (change) => {
    console.log('obj1 a', change.newValue);
});

const disposerB = observe(obj1.b, (change) => {
    console.log('obj1.b', change.newValue);
});

// disposerB 等同于
// observe(obj2, (change) => {
//     console.log('obj2.a', change.newValue);
// });
// observe(obj1.b, 'a', (change) => {
//     console.log('obj2.a', change.newValue);
// });

obj1.a += 1;
obj2.a += 1;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题