Mobx设置了一个可观察到的套接字

时间:2018-08-23 18:51:51

标签: sockets observable mobx

我正在使用套接字将数据通过后端的节点服务器通过管道传输到我的项目。我可以正确配置商店,但是在执行以下操作时:

class Store {
    @observable
    socketData = {};

    constructor() {
        this.socket = io("localhost:5000");
        this.socket.on("event", function(data) {
            this.socketData = data;
        });
    }
}

当我用console.log(this.socketData)数据时,它打印出一个代理而不是我从套接字传递过来的JSON数据。当我在构造函数中console.log(data)时,它打印出对象。我的数据作为代理打印出来是有原因的吗?还是用套接字设置可观察对象的不好方法?

1 个答案:

答案 0 :(得分:0)

MobX用代理替换原始数据对象,以便能够检测属性访问和修改。 在大多数情况下,这是完全透明的,您无需知道要使用代理,但是如果确实需要纯JavaScript对象,则可以使用mobx.toJS

console.log(mobx.toJS(this.socketData))

此外,在构造函数中,您可能需要将function(data) {...}更改为箭头函数data => {...},以确保this引用了函数体中的存储。