Nếu bạn đang sử dụng kiến trúc kiểu Flux, điều này có thể đạt được độc đáo với Cửa hàng.
Hãy tưởng tượng bạn có một cửa hàng được gọi là MyModalStore
(hoặc ShareModalStore
hoặc bất kỳ phương thức nào). Cửa hàng chứa tất cả các dữ liệu cần thiết cho nội dung phương thức, cũng như có hay không nó sẽ được hiển thị.
Dưới đây là một cửa hàng đơn giản mà theo dõi xem phương thức là nhìn thấy được, và những gì tiêu đề là:
MyModalStore.js
var _visible = false;
var _modalTitle;
var MyModalStore = {
isModalVisible: function() {
return _visible;
},
getModalTitle: function() {
return _modalTitle;
}
};
MyModalStore.dispatchToken = Dispatcher.register(function(payload) {
var action = payload.action;
switch (action.type) {
case 'SHOW_MODAL':
_visible = true;
_modalTitle = action.modalTitle;
MyModalStore.emitChange();
break;
case 'HIDE_MODAL':
_visible = false;
MyModalStore.emitChange();
break;
}
});
module.exports = MyModalStore;
Sau đó, các thành phần muốn hiển thị modal kích hoạt hành động 'SHOW_MODAL'
với số modalTitle
và bản thân thành phần phương thức sẽ lắng nghe những thay đổi của cửa hàng để biết thời điểm hiển thị chính nó.
Bạn có thể xem mẫu thông lượng này trong các dự án mẫu trên facebook/flux on github.
Không sử dụng thông lượng, tôi đoán bạn sẽ cung cấp gọi lại xuống phân cấp mô-đun của bạn để bất kỳ ai cũng có thể nhấn gọi lại để hiển thị phương thức và được ủy quyền cho thành phần phương thức thực tế ở cấp cao nhất. Đây không phải là một cách tiếp cận tuyệt vời cho các ứng dụng lớn hơn, vì vậy tôi khuyên bạn nên sử dụng phương pháp thông lượng.
Chúng tôi xuất bản một số store helper code here, nhưng có rất nhiều khác libraries and examples out there as well.
Nguồn
2015-05-19 18:40:33
Hãy xem [HunttLayeredComponentMixin'] của Pete Hunt (http://jsfiddle.net/LBAr8/), cho phép bất kỳ thành phần nào sở hữu nhiều lớp như các phương thức. Cũng liên quan: https://github.com/facebook/react/issues/379 –
[OverlayMixin] (https://github.com/stevoland/react-bootstrap/blob/master/src/OverlayMixin.js) trông tương tự , nghĩ rằng nó cũng dựa trên mixin đó. – Douglas
Nó thực sự khá dễ dàng để làm điều này cho mình quá. Tôi thích sử dụng thuộc tính thành phần 'statics' để bọc' renderComponent' sao cho nó luôn gắn kết vào một vị trí cụ thể: div cố định trong dom của tôi (Và tạo và nối nó vào phần thân nếu nó chưa tồn tại). Xem bài đăng của tôi ở đây để biết một thành phần ví dụ đơn giản: http://stackoverflow.com/questions/24239157/how-to-make-react-js-play-nice-together-with-zurb-reveal-modal-form/24396559# 24396559 –