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