Come puoi ottenere un evento hover o un evento attivo in ReactJS quando esegui lo styling in linea?
Ho scoperto che l'approccio onMouseEnter, onMouseLeave è bacato, quindi spero che ci sia un altro modo per farlo.
In particolare, se passi il mouse su un componente molto rapidamente, viene registrato solo l'evento onMouseEnter. OnMouseLeave non si attiva mai e quindi non può aggiornare lo stato ... lasciando che il componente appaia come se fosse ancora sospeso. Ho notato la stessa cosa se provi a imitare la pseudo-classe css ": active". Se fai clic molto velocemente, verrà registrato solo l'evento onMouseDown. L'evento onMouseUp verrà ignorato ... lasciando il componente attivo.
Ecco un JSFiddle che mostra il problema: https://jsfiddle.net/y9swecyu/5/
Video di JSFiddle con problema: https://vid.me/ZJEO
Il codice:
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')
)