Reactjs Mobx使用类模型来定义可观察对象

Reactjs Mobx使用类模型来定义可观察对象,reactjs,mobx,mobx-react,Reactjs,Mobx,Mobx React,我尝试将可观察对象设置为类模型的映射,但出于某种原因,Mobx无法检测类模型是否发生了更改。我做了一些修补,发现Mobx只检测到数组、贴图、对象和原语之一的可观测值的变化。这里有一个例子 所以我在文档中读到mobx也支持类实例作为可观察对象。一定是我做错了什么 我使用了对象类型,但是有没有办法使用类模型作为可观察对象,以便在其中添加一些方法 类任务{ @可观察列表=新映射(); @action addTask=(数据,类型)=>{ //当我用这个的时候,它就起作用了 任务=类型===任务类型.R

我尝试将可观察对象设置为类模型的映射,但出于某种原因,Mobx无法检测类模型是否发生了更改。我做了一些修补,发现Mobx只检测到数组、贴图、对象和原语之一的可观测值的变化。这里有一个例子

所以我在文档中读到mobx也支持类实例作为可观察对象。一定是我做错了什么

我使用了对象类型,但是有没有办法使用类模型作为可观察对象,以便在其中添加一些方法

类任务{
@可观察列表=新映射();
@action addTask=(数据,类型)=>{
//当我用这个的时候,它就起作用了
任务=类型===任务类型.ROUTINE{
…一些数据
} : {
…一些数据
};
//但不是这个
任务=类型===任务类型.例程?新例程({
…一些数据
}):新待办事项({
…一些数据
});
this.list.set(task.id,task);
updateTask(this.list);
}
//每当我在某个组件中调用下面的这些操作时,它只会在操作块上改变列表
//但是如果我使用上面的第二个选项,就不会反映出这些变化
@操作删除任务=(id)=>{
此.列表.删除(id);
updateTask(this.list);
}
@action addTime=(项目,金额=10)=>{
const nItem=this.list.get(item.id);
nItem.timespunt=nItem.timespunt+金额;
此.list.set(item.id,nItem);
updateTask(this.list);
}
}

因此您需要将
任务.列表
容器和
例程
Todo
实例中的每个相关原语都设置为可观察的。我不使用decorator,所以您必须检查语法是否正确

class Task {
    @observable list = new Map();
    @action addTask = (data, type) => {

        task = type === TASKTYPE.ROUTINE ? new Routine({
            id: "someId"
        }) : new Todo({
            id: "someOtherId",
            settings: {}
        });

        this.list.set(task.id, task);
        updateTask(this.list);
    }
}
class Routine {
    constructor(options) {
        //each primitive inside the class can be observed
        @observable this.id = options.id;
    }
}
class Todo {
    constructor(options) {
        @observable this.id = options.id;
        //you can also observe changes to objects
       @observable this.settings = options.settings;
    }
}

希望能有所帮助。

因此您需要将
任务.list
容器和
例程
Todo
容器内的每个相关原语都设置为可观察的。我不使用decorator,所以您必须检查语法是否正确

class Task {
    @observable list = new Map();
    @action addTask = (data, type) => {

        task = type === TASKTYPE.ROUTINE ? new Routine({
            id: "someId"
        }) : new Todo({
            id: "someOtherId",
            settings: {}
        });

        this.list.set(task.id, task);
        updateTask(this.list);
    }
}
class Routine {
    constructor(options) {
        //each primitive inside the class can be observed
        @observable this.id = options.id;
    }
}
class Todo {
    constructor(options) {
        @observable this.id = options.id;
        //you can also observe changes to objects
       @observable this.settings = options.settings;
    }
}

希望有帮助。

你看到我的答案了吗?有帮助吗?你看到我的答案了吗?有帮助吗?