Mobx Observe困惑

发布于 2022-09-12 04:21:17 字数 561 浏览 16 评论 0

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",()=>{})

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

再可℃爱ぅ一点好了 2022-09-19 04:21:17
  • 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文