2015-05-07 20 views
11

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?

+2

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? –

+0

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

+0

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

Trả lời

3

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.

6

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().

+6

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 –

+0

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. –

5

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); 
1

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.

1

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 
1

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.

Các vấn đề liên quan