0
ディープjsonオブジェクト構造(ツリーなど)で@ observableを実装する方法を探しています。データツリーが本当に深刻になる可能性があります。各ノードには多くのプロパティがありますが、ツリーノードでは1つのプロパティしか観察する必要がありません。単にすればMobxのディープオブジェクトを見る
@observable questionnaire = {}
でも動作しますが、それはウエストだと思います。私は「選択された」特性のみを観察する必要がある。 ここに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あなたの答えをありがとう。私はあなたのコードを最小限に変更して、あなたの答えを私の問題の解決策として受け入れます。私はこの線が必要ではないと思っています。@ observable childNodes = asFlat([]); 'selected'プロパティは、私が新しいNode(子)になるたびに観測可能になります。再度あなたの助けに感謝します。 :-) –