0
나는 깊은 json 객체 구조 (예 : 트리) 데이터 트리를 @observable로 구현하는 가장 좋은 방법을 찾고 있습니다. 데이터 트리가 실제로 깊어 질 수 있습니다. 각 노드에는 많은 속성이 있지만 트리 노드에는 하나의 속성 만 관찰해야합니다. 간단히하면Mobx의 깊은 객체 관찰
@observable questionnaire = {}
작동하지만 허리라고 생각합니다. 나는 단지 'selected'속성을 관찰 할 필요가있다. 여기 json 구조가 있습니다. 설문지 개체가 간소화되어 있으면 내가 정정 해주세요. new Node(json)
:
class Node {
@observable selected = false;
@observable childNodes = asFlat([]);
constructor(data) {
// Recursively create `Node` objects for all children.
data.childNodes = data.childNodes.map(child => new Node(child));
Object.assign(this, data);
}
}
그런 다음 당신은 당신의 최상위 JSON 개체에서
Node
객체를 생성 :
[
{
"id": "1",
"title": "level 1",
"description": "text",
"type": "Question",
"selected": false,
"childNodes": [
{
"title": "level 2",
"description": "text",
"type": "Question",
"selected": false,
"childNodes": [
{
"title": "level 3",
"description": null,
"type": "Question",
"selected": false,
"childNodes": [
{
"title": "level 4 1",
"childNodes": [],
"description": null,
"type": "Checkbox",
"selected": false
},
{
"title": "level 4 2",
"childNodes": [],
"description": null,
"type": "Checkbox",
"selected": false
},
{
"title": "level 4 3",
"childNodes": [],
"description": null,
"type": "Checkbox",
"selected": false
},
...
]
}, ...
우리가 childNodes를 관찰하면 그 노드의 모든 속성을 관찰 할 수있을 것이라고 생각합니까? –
당신이 옳습니다. 이를 방지하기 위해 asFlat 수정자를 사용해야합니다. 나는 나의 대답을 업데이트했다. –
Mouad Debbar 답변 해 주셔서 감사합니다. 귀하의 코드를 최소한으로 수정하여 내 문제의 해결책으로 귀하의 답변을 수락합니다. 나는이 라인이 필요 없다고 생각한다 @ 관찰 가능한 childNodes = asFlat ([]); 'selected'속성은 새로운 노드 (자식)가 될 때마다 관찰 할 수 있습니다. 도움을 주셔서 다시 한 번 감사드립니다. :-) –