Używam aplikacji immutable.js z moją aplikacją flux. Jest to bardzo przydatne i zapewnia zwiększenie wydajności. Ale to, co mnie naprawdę zasmuca, to fakt, że nie mogę używać razem z nim lodash. Lodash zapewnia wspaniałe API z mnóstwem przydatnych funkcji, więc zastanawiam się, czy jest jakiś sposób, żeby je połączyć, żeby dla mnie działały?Jakimkolwiek sposobem używania immutable.js z lodash?
Odpowiedz
I niedawno napisał otoki Lodash zapewniając Immutable.JS wsparcie nazywa mudash. Większość głównych funkcji Lodasha jest obsługiwanych przez regularne dodawanie kolejnych.
Domyślam się, że próbujesz zrobić coś w stylu mapy z zamkiem na niezmiennym zestawie. Lodash nie robi użytecznych rzeczy, gdy próbujesz to zrobić bezpośrednio.
Zauważ, że immutable.js ma już wiele własnych funkcji manipulacyjnych (jak map
), a także własne leniwy łańcuch (przez Seq
), więc powinieneś zajrzeć do nich.
Jeśli musisz zrobić coś, co zapewnia lodash
, a immutable.js
nie, jedną rzeczą, którą możesz zrobić, to wziąć swój niezmienny obiekt i przekształcić go w waniliowy obiekt JS do konsumpcji przez lodash. Na przykład:
// Do all of your fancy immutable.js stuff...
my_set = immutable.Set([1,2,3]).union(immutable.Set([2,3,4]))
// ...and then convert to JS before you do all of your fancy lodash stuff
mapped_set = _(my_set.toArray()).map(whatever)
Będziesz oczywiście trzeba wziąć pod uwagę wydajność tutaj, ponieważ może skończyć się najgorsze z obu światów, jeśli konwersji z jednego do drugiego, kopiując dane do wanilii struktura danych. Na przykład w przypadku z zabawkami lepiej byłoby, gdybyś użył bezpośrednio immutable.js map()
.
Konwersja rzeczy z JS i JS wiele razy jest nie do przyjęcia dla mojego konkretnego przypadku. W każdym razie dowiedziałem się, że immutable.js ma duże API samo w sobie i w większości przypadków zastępuje lodash. W każdym razie dziękuję za odpowiedź –
Mogę potwierdzić, że stałe korzystanie z haseł .fromJS() i .toJS() jest bardzo kosztowne. Sugerowałbym założenie, że całe drzewo stanu jest zamknięte w interfejsie API Immutable.js lub bardzo ostrożnie podchodzi do niego. –
Możesz użyć Ramda, jeśli chcesz mieć niezmienność i funkcje wolne od efektów ubocznych.
Biblioteka zawiera użyteczne funkcje podobne do zadań, ale funkcjonalny styl programowania, który nie powoduje mutacji danych użytkownika.
Zastanów się, this React example używając funkcji map w składni Ramda i ES6.
R.map(function, array);
seamless-immutable ma na celu zapewnienie, że API jest wstecznie kompatybilny ze strukturami danych wanilia JS.
Pozwala to na używanie metod LINASA. Jednakże, ponieważ wiele metod LASHA jest napisanych z myślą o zmienności, są one prawdopodobnie dalekie od optymalnych.
Możesz wypróbować stworzoną przeze mnie https://github.com/engineforce/ImmutableAssign, która jest lekką, niezmienną pomocniczką, która obsługuje niezmienność i pozwala ci kontynuować pracę z POJO (Plain Old JavaScript Object). W związku z tym możesz użyć dowolnej funkcji LILASA.
np
var iassign = require("immutable-assign");
var _ = require("lodash");
var o1 = { a: { c: 1 }, b: [1, 2, 3] };
var o2 = iassign(
o1,
function(o) { return o.b; }, // get property to be updated
function(b) { // update select property
return _.map(b, function(i) { return i + 1; });
}
);
// o2 = { a: { c: 1 }, b: [2, 3, 4] }
// o1 is not modified
// o2 !== o1
// o2.b !== o1.b
// o2.a === o1.a
Jak korzystać z withMutations w ImmutableJS?
Wyszukaj Batching Mutations
w celu uzyskania krótkiego wyjaśnienia here.
- 1. Immutable.js Zestaw map vs aktualizacja
- 2. Immutable.js - leniwa sekwencja
- 3. wykonywanie kodu przed jakimkolwiek działaniem
- 4. Czy mogę użyć zadania destructuring z immutable.js?
- 5. immutable.js dostać klucze z mapy/hash
- 6. immutable.js filtruj i mutuj (usuń) znaleziono wpisy
- 7. Sortowanie i Grupa Immutable.js Lista
- 8. Lodash forEach Asocjacyjna tablica
- 9. parsowania zagnieżdżone Records w Immutable.js
- 10. Lodash filtr zagnieżdżonego
- 11. lodash "zawiera" nie działa
- 12. lodash _.find wszystkie mecze
- 13. Lodash findIndex nie działa
- 14. lodash: obiekt z głębokim kopiowaniem, ale nie wszystkie właściwości.
- 15. Array obiektów głębokiego stosunku lodash
- 16. _.clone w lodash nie działa?
- 17. LoDash _.has dla wielu kluczy
- 18. lodash multi-kolumna SortBy malejąco
- 19. Lodash map i return unique
- 20. Lodash - jak uzyskać wiele wyników
- 21. Jak zadeklarować mapę zawierającą pewne właściwości z flowtype & immutable.js
- 22. Dlaczego klasy immutable.js nie wymagają "nowych"?
- 23. Co to jest "ownerID" w pliku Immutable.js?
- 24. Immutable.js push do tablicy w zagnieżdżonego obiektu
- 25. Czy lodash _.size() jest szybszy niż własność JS length?
- 26. pytonic sposobem usuwania elementów z tablicy numpy
- 27. Wyłączanie pola wyboru z jednym sposobem wiązania
- 28. skutecznym sposobem na znalezienie ciąg z StreamReader
- 29. Prawidłowe sposobem użycia HttpContext.Current.User z async czekają
- 30. Korzyści z używania konstruktora?
Może podać kod, którego próbujesz użyć, co ilustruje _how_ dwie biblioteki nie działają razem? –
Nie widzę sposobu, w jaki mogłyby współpracować ze sobą, ponieważ lodash obsługuje tablice javascript i obiekty - immutable.js zastępuje je własnymi listami i mapami. – OlliM
Możesz również sprawdzić https://github.com/engineforce/ImmutableAssign, który obsługuje niezmienność i pozwala ci kontynuować pracę z POJO (Plain Old JavaScript Object). – engineforce