Я делаю расширение Chrome, которое вставляет на страницу 2 разных варианта React. Я бы хотел, чтобы каждый из них синхронизировался, отправив 2-ое событие с соответствующими данными, когда в первом было выбрано что-то еще.Обмен событиями между компонентами React
Есть ли практика, когда дело доходит до отправки событий другим компонентам?
Я попытался это из первого:
evt = new CustomEvent("selectedEmailChange", {
detail: {
email: data.email
}
});
window.dispatchEvent(evt);
, а затем в второй:
componentDidMount: function() {
this.listenForEmailChange();
},
componentWillUnmount: function() {
window.removeEventListener("selectedEmailChange", this.handleEmailChange, false);
},
listenForEmailChange: function() {
window.addEventListener("selectedEmailChange", this.handleEmailChange, false);
},
handleEmailchange: function() {
debugger
console.log("i heard you dog!");
},
Но ничего не поймали во 2-й.
Похоже, что подписка на события в компонентеDidMount - лучшая практика ... http://facebook.github.io/react/tips/communicate-between-components.html – pherris
попробуйте window.postMessage вместо этого - я предполагаю, что расширение, которое вы не можете опубликовать подобное сообщение. http://stackoverflow.com/questions/9602022/chrome-extension-retrieving-gmails-original-message/9636008#9636008 – pherris
@pherris Я использую его для связи с главной страницей в других местах, и это определенно работает. – brandonhilkert