Sto animando diversi componenti React.js in base alla loro posizione nella finestra. Se il componente si trova nella finestra, animare l'opacità a 1, se non è nella finestra, animare la sua opacità a 0. Sto usando le proprietà top
e bottom
per determinare se il componente si trova all'interno della finestra.Best practice React.js per quanto riguarda l'ascolto degli eventi della finestra dai componenti
ComponentA mostra il pattern che ho seguito per gli altri componenti B, C e D. Ciascuno sta ascoltando l'evento di scorrimento window
.
È questo il modo "React" per fare ciò da ciascun componente che deve dover aggiungere un listener di eventi allo window
? Ascoltatori di eventi di scorrimento multipli nella stessa finestra?
Oppure c'è un modo migliore aggiungendo il listener di eventi di scorrimento alla finestra una volta sul componente proprietario Home
? Quindi i componenti figlio propri possono ancora sapere dove si trovano nel DOM utilizzando getBoundingClient()
?
Home = React.createClass({
render: function() {
<div>
<ComponentA />
<ComponentB />
<ComponentC />
<ComponentD />
</div>
};
});
ComponentA = React.createClass({
componentDidMount: function() {
window.addEventListener('scroll', this.handleScroll);
},
componentWillUnmount: function() {
window.removeEventListener('scroll', this.handleScroll);
},
handleScroll: function() {
var domElement = this.refs.domElement.getDOMNode();
this.inViewPort(domElement);
},
inViewPort: function(element) {
var elementBounds = element.getBoundingClientRect();
(elementBounds.top <= 769 && elementBounds.bottom >= 430) ? TweenMax.to(element, 1.5, { opacity: 1 }) : TweenMax.to(element, 1.5, { opacity: 0 });
},
render: function() {
return (/* html to render */);
}
});
Può un componente di alto livello come reagire-router o Redux di collegare fattibile? – earthdan