2016-03-10 21 views
5

Próbuję zrozumieć, jak używać tablicy obserwowalnej z Mobx.Mobx: Tablica obserwowalna nie wyświetla się poprawnie

mam trudny czas, aby dowiedzieć się, dlaczego tak:

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

pisze:

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

Zamiast klasycznej tablicy?

Odpowiedz

19

Zobacz!

Jak stwierdzono w docs

pamiętać, że Array.isArray (obserwowalne ([])) przyniesie fałszywy, więc kiedy trzeba zdać zaobserwowania tablicę do zewnętrznej biblioteki, jest to dobrym pomysłem jest utworzenie płytkiej kopii przed przekazaniem jej do innych bibliotek lub wbudowanych funkcji (co jest dobrą praktyką) przy użyciu array.slice() lub array.peek(). Tak więc Array.isArray (obserwowalne ([]). Slice()) da wynik prawdziwy.

W exemple doc pokazać nam todos.filter() co może prowadzić do nieporozumień, ponieważ todos wygląda jak prawdziwy JS Array. Ale to nie jest.

Tak więc dla mojego przykładu do pracy po prostu muszę console.log(entities.slice()), który wyświetli prawdziwą tablicę JS.

+0

Miałem ten problem, używając '