각 프로젝트가 @observable 인 projects => task_lists => tasks의 클래스 계층 구조가 있습니다. 이제는 프로젝트의 모든 task_lists에서 모든 작업을 모으는 "@computed get allTasks"프로젝트를 만들고 싶습니다.obserxable list를 mobx로 집계 한 계산 된 getter를 선언하는 방법
class MsiTask {
@observable name:string;
constructor() {.... };
}
class MsiTaskList {
@observable tasks:MsiTask[];
constructor() {.... };
}
class MsiProject {
id:string;
@observable name:string;
@observable taskLists:MsiTaskList[]=[];
constructor (data) {
$log.debug ('Constructing a Project with', data, this);
this.id = data.id;
this.name = data.name;
ProjectCache[this.id] = this;
/** Can I do reassign taskLists or should I fill it? **/
this.taskLists = lodash.map (data.taskLists || [], (taskList) => {
return new MsiTaskList (taskList, this);
});
}
createTaskList (title:string) : MsiTaskList {
let taskList = new MsiTaskList ({ name: title, id: MsiUtils.uuid() }, this);
$log.debug ('add task list', title, taskList);
this.taskLists.push (taskList);
return taskList;
}
}
나는 현재 이런 식으로 정의
클래스 MsiProject에서...
@computed get allTasks() : MsiTask[] {
var arrayOfTasks = lodash.map(this.taskLists, 'tasks');
var result = lodash.reduce(arrayOfTasks, (res, array) => {
lodash.each (array, (it) => { res.push(it); });
return res;
}, []);
return result; // tried also return observable.array (result);
}
하지만 내 사용자 지정 구성 요소에서 사용될 때 나는 다이제스트주기 오류가 점점 오전 :
나는 AllTasks가 매번 다른 배열을 반환한다는 것을 이해하지만 mobx는 내용이 변경되지 않았으며 다이제스트주기를 생성하지 않는다는 것을 알았습니다.
mobx 사용법을 완전히 이해하지 못했습니까?
는 전체'MsiProject' 클래스, 구성 요소 및 오류의 스택 트레이스를 포함시겠습니까? – Tholle
Thanks @Tholle. MsiProjects에 몇 가지 코드를 추가했습니다. 그것을보고 자주 묻는 질문을 다시 읽는 동안 문제가 될 가능성이있는 this.taskLists를 생성자에 재 할당하고있었습니다. 나는 그것을 필연적으로 채워야한다. (프로그램에서 코드를 변경 했으므로 시도해야합니다.) 어떻게 생각해? 그게 문제 야. 나는 그것을 새로운 관측 가능 물과 함께 포장해야 할까? 그 장식자를 엉망으로 만들겠습니까? –