2016-03-10 5 views
5

Ich versuche zu verstehen, wie Observable Array mit Mobx verwenden.Mobx: Observable Array wird nicht korrekt angezeigt

Ich habe eine harte Zeit, um herauszufinden, warum dies:

let entities = observable([]); 
entities[0] = "foo"; 
autorun(() =>{ 
    console.log(entities); 
}); 

schreibt:

[$mobx: Object] 
0: (...) 
1: (...) 
2: (...) 
3: (...) 
4: (...) 
5: (...) 
6: (...) 
7: (...) 
8: (...) 
9: (...) 
10: (...) 
11: (...) 
12: (...) 
13: (...) 
14: (...) 
15: (...) 
16: (...) 
17: (...) 
... 
999: (...) 

Statt eines klassischen Array?

Antwort

19

Herausfinden!

Wie in den docs

angegeben

beachten Sie, dass Array.isArray (beobachtbaren ([])) wird falsch ergeben, so, wenn Sie eine beobachtbare Array an eine externe Bibliothek übergeben müssen, es ist eine gute Idee, eine flache Kopie zu erstellen, bevor Sie sie an andere Bibliotheken oder integrierte Funktionen übergeben (was ohnehin gut ist), indem Sie array.slice() oder array.peek() verwenden. Array.isArray (beobachtbar ([]). Slice()) wird also wahr ergeben.

Die doc exemple zeigen uns eine todos.filter() was zu Verwirrung führen könnte, weil todos wie ein echter JS Array aussieht. Aber es ist nicht.

Also für mein Beispiel zu arbeiten, ich muss nur console.log(entities.slice()), die eine echte JS-Array angezeigt wird.

+0

Ich hatte dieses Problem mit '