Comment vous Placez dans ReactJS? - onMouseLeave pas enregistrés au cours rapide survolez

Comment pouvez-vous obtenir un hover événement ou événement actif ReactJS lorsque vous ne inline style?

J'ai trouvé que la onMouseEnter, onMouseLeave approche est buggé, donc en espérant il y a une autre façon de le faire.

Plus précisément, si vous passez la souris sur un composant très rapidement, seuls les onMouseEnter événement est enregistré. Le onMouseLeave se déclenche jamais, et ne peut donc pas de mise à jour de l'état... en laissant le composant à apparaître comme si c'est encore d'être survolé. J'ai remarqué la même chose si vous essayez d'imiter la ":active" css pseudo-classe. Si vous cliquez sur vraiment rapide, seulement l'événement onMouseDown inscription. L'événement onMouseUp sera ignorée... laissant le composant apparaissant active.

Ici est un JSFiddle montrant le problème: https://jsfiddle.net/y9swecyu/5/

Vidéo de JSFiddle avec problème: https://vid.me/ZJEO

Le code:

var Hover = React.createClass({
getInitialState: function() {
return {
hover: false
};
},
onMouseEnterHandler: function() {
this.setState({
hover: true
});
console.log('enter');
},
onMouseLeaveHandler: function() {
this.setState({
hover: false
});
console.log('leave');
},
render: function() {
var inner = normal;
if(this.state.hover) {
inner = hover;
}
return (
<div style={outer}>
<div style={inner}
onMouseEnter={this.onMouseEnterHandler}
onMouseLeave={this.onMouseLeaveHandler} >
{this.props.children}
</div>
</div>
);
}
});
var outer = {
height: '120px',
width: '200px',
margin: '100px',
backgroundColor: 'green',
cursor: 'pointer',
position: 'relative'
}
var normal = {
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
right: 0,
backgroundColor: 'red',
opacity: 0
}
var hover = {
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
right: 0,
backgroundColor: 'red',
opacity: 1
}
React.render(
<Hover></Hover>,         
document.getElementById('container')
)
  • Merci pour la suggestion. Je l'ai ré-écrit comme une question maintenant.
  • S'il vous plaît ajouter des exemples de code mettant en évidence le problème (de préférence en jsFiddle ou équivalent) comme il est pas encore clair quel est le problème. Qu'entendez-vous par "événement est enregistré"?