2014-09-24 33 views
5

Làm cách nào để tôi có thể thay đổi trạng thái của thành phần React từ mã jQuery cũ của mình Mã số của jQuery?Thay đổi trạng thái của thành phần React từ Javascript bên ngoài cũ?

Tôi có một thành phần như thế này:

var AComponent = React.createClass({ 
    getInitialState: function() { 
    return { ids: [] } 
    }, 
    render: function() { 
    ... 
    }, 
    onButtonClick: function() { 
    ids.splice(…); // remove the last id 
    } 
}); 

Khi một cái gì đó đặc biệt xảy ra trong các mã súp cũ jQuery, tôi muốn đẩy một id để AComponent.state.ids. Làm thế nào tôi có thể làm điều đó?

Một giải pháp "hiển nhiên" là chống mẫu; ở đây là:

var componentInstance = AComtonent({}); 
React.renderComponent(componentInstance, document.getElementById(...)); 

// Somewhere else, in the jQuery soup. Something special happens: 
componentIntance.state.ids.push(1234); 
componentIntance.setState(componentInstance.state); 

Đây là một antipattern, theo this email from a Facebook developer, vì ông viết rằng componentInstance có thể bị phá hủy bởi phản ứng.

+0

Tôi nghĩ rằng bằng cách thiết kế đột biến trạng thái được cho là nội bộ, vì vậy nếu bạn muốn thay đổi nó từ bên ngoài, bạn nên sử dụng một đạo cụ. Điều đó có nghĩa là chia thành phần của bạn thành hai trong trường hợp của bạn. IE: di chuyển trạng thái của bạn đến một cái gì đó bao gồm kích hoạt súp jquery của bạn và do đó giải quyết vấn đề của bạn. –

+0

@plus Tốt để biết rằng đột biến trạng thái chỉ nên nội bộ. Tôi không hiểu ý của bạn với * "bao gồm kích hoạt súp jquery của bạn" * - bạn có nghĩa là nhà nước nên được đặt bên ngoài các thành phần và tôi muốn vượt qua nhà nước mutators như đạo cụ cho các thành phần? (Như trong câu trả lời của kulesa.) – KajMagnus

Trả lời

4

Tôi sẽ làm cho thành phần không trạng thái. Lưu trữ mảng ids bên ngoài thành phần của bạn và truyền nó như một nhánh với các hàm sẽ sửa đổi mảng. Xem ví dụ trên JSFiddle: http://jsfiddle.net/ohvco4o2/5/

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