Tôi đang sử dụng immutable.js với ứng dụng thông lượng của tôi. Nó rất hữu ích và tăng hiệu suất. Nhưng những gì thực sự làm tôi buồn là một thực tế là tôi không thể sử dụng lodash cùng với nó. Lodash cung cấp API tuyệt vời với nhiều chức năng hữu ích, vì vậy tôi tự hỏi có thể có cách nào để đưa chúng lại với nhau để làm việc cho tôi?Bất kỳ cách nào để sử dụng immutable.js với lodash?
Trả lời
Gần đây tôi đã viết một wrapper Lodash cung cấp Immutable.JS hỗ trợ gọi mudash. Hầu hết các chức năng chính của Lodash được hỗ trợ với nhiều chức năng được bổ sung thường xuyên.
Tôi giả sử bạn đang cố gắng làm một việc gì đó giống như thực hiện bản đồ lodash trên một bộ không thể thay đổi. Lodash không làm những việc hữu ích khi bạn cố gắng làm điều đó trực tiếp. Lưu ý rằng immutable.js đã có rất nhiều chức năng thao tác riêng của nó (như map
) cũng như chuỗi lười riêng của nó (thông qua Seq
), do đó bạn nên xem xét chúng.
Nếu bạn cần làm điều gì đó mà lodash
cung cấp và immutable.js
không, một việc bạn có thể làm là lấy đối tượng bất biến và chuyển đổi nó thành đối tượng vanilla JS để tiêu thụ bằng lodash. Ví dụ:
// 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ạn sẽ đương nhiên phải đi biểu diễn vào tài khoản tại đây, kể từ khi bạn có thể kết thúc với điều tồi tệ nhất của cả hai thế giới nếu bạn chuyển đổi từ một đến khác bằng cách sao chép dữ liệu của bạn vào một vani cấu trúc dữ liệu. Ví dụ: trong trường hợp đồ chơi ở trên, bạn có thể nên sử dụng trực tiếp một cách không trực tiếp bằng cách sử dụng một immutable.js map()
.
Chuyển đổi nội dung từ JS và JS nhiều lần không được chấp nhận cho trường hợp cụ thể của tôi. Dù sao tôi phát hiện ra rằng immutable.js có API lớn của chính nó và trong hầu hết các trường hợp thay thế lodash. Dù sao cảm ơn bạn đã trả lời –
Tôi có thể chứng thực việc sử dụng chập chững liên tục của .fromJS() và .toJS() rất tốn kém. Tôi sẽ đề nghị hoặc giả sử toàn bộ cây trạng thái của bạn được đóng gói trong API của Immutable.js hoặc rất cẩn thận với cách bạn dệt nó vào. –
Bạn có thể sử dụng Ramda nếu bạn muốn các chức năng miễn phí và không có tác dụng phụ.
Thư viện cung cấp các chức năng hữu ích tương tự như lodash nhưng theo kiểu lập trình chức năng không bao giờ làm thay đổi dữ liệu người dùng.
Xem xét this React example bằng cách sử dụng hàm bản đồ theo cú pháp Ramda và ES6.
R.map(function, array);
seamless-immutable nhằm cung cấp API tương thích ngược với cấu trúc dữ liệu vani JS.
Điều này cho phép bạn sử dụng các phương pháp lodash. Tuy nhiên, vì nhiều phương pháp của lodash được viết với khả năng biến đổi trong tâm trí, chúng có lẽ là từ tối ưu.
Bạn có thể muốn xem https://github.com/engineforce/ImmutableAssign được tạo bởi tôi, một trình trợ giúp không thay đổi được trọng lượng nhẹ, hỗ trợ tính bất biến và cho phép bạn tiếp tục làm việc với POJO (đối tượng JavaScript cũ thuần túy). Do đó bạn có thể sử dụng bất kỳ hàm lodash nào.
Ví dụ:
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
Làm thế nào để sử dụng withMutations trong ImmutableJS?
Tìm kiếm Batching Mutations
để được giải thích ngắn gọn here.
- 1. Làm thế nào để sử dụng Immutable.js với redux?
- 2. Bất kỳ cách nào để sử dụng khung trong HTML5?
- 3. Bất kỳ cách nào để giảm htmlspecialchars() CPU sử dụng?
- 4. Bất kỳ kinh nghiệm sử dụng PostSharp nào với ReSharper
- 5. Bất kỳ hướng dẫn nào về cách sử dụng phpDocumentor?
- 6. làm thế nào để sử dụng python của bất kỳ
- 7. Sử dụng FileChannel để viết bất kỳ InputStream nào?
- 8. Làm thế nào để sử dụng: chứa (văn bản) với bất kỳ văn bản với jQuery
- 9. Bất kỳ ai sử dụng Qi4J
- 10. Sử dụng C++ 17 'bất kỳ' với Xcode 8.1
- 11. Sử dụng dữ liệu từ bất kỳ ứng dụng nào
- 12. Bất kỳ ý tưởng nào về cách sử dụng Trình biên dịch Google Closure để kết hợp nhiều tệp javascript với bất kỳ tối ưu nào?
- 13. Bất kỳ hướng dẫn nào tốt về cách sử dụng OAuth với Piston?
- 14. Làm cách nào để đặt __m128i mà không sử dụng bất kỳ lệnh SSE nào?
- 15. Sử dụng regex để khớp với bất kỳ ký tự nào trừ =
- 16. Sử dụng clojure.math.numeric-tower hoặc bất kỳ thư viện nào
- 17. Làm cách nào để hợp nhất hai mảng đối tượng bằng cách sử dụng lodash?
- 18. Lodash Typescript: Làm thế nào để khai báo một từ điển để sử dụng với _.map?
- 19. Bất kỳ cách nào để sử dụng một tuple làm khóa trong giá? (Python)
- 20. slurm: sử dụng bất kỳ nút nào từ nodelist
- 21. Bất kỳ rủi ro nào khi sử dụng Macports?
- 22. Cách liên kết với bất kỳ cổng nào có sẵn?
- 23. Bitshift để nhân với bất kỳ số nào
- 24. Django: bất kỳ việc sử dụng blocktrans nào khiến TemplateSyntaxError
- 25. Bất kỳ trường hợp sử dụng thực nào để sử dụng fastcall quy ước cuộc gọi?
- 26. Bất kỳ gotchas nào sử dụng unicode_literals trong Python 2.6?
- 27. Bất kỳ lý do gì để vẫn sử dụng CVS?
- 28. Có bất kỳ bất lợi nào đối với SEAM không?
- 29. Bất kỳ ai sử dụng Rhino Security?
- 30. Bất kỳ cách nào để sử dụng bộ ghép Hamcrest trong mã sản xuất?
Có thể cung cấp một số mã bạn đang cố gắng sử dụng minh họa _how_ hai thư viện này không hoạt động cùng nhau? –
Tôi không thấy làm thế nào họ có thể làm việc cùng nhau, như lodash xử lý các mảng javascript và các đối tượng - immutable.js thay thế chúng bằng Danh sách và Bản đồ của riêng nó. – OlliM
Bạn cũng có thể xem https://github.com/engineforce/ImmutableAssign, hỗ trợ tính bất biến và cho phép bạn tiếp tục làm việc với POJO (đối tượng JavaScript cũ thuần túy). – engineforce