Wie können Sie in InctJS entweder ein Schwebeereignis oder ein aktives Ereignis erzielen, wenn Sie Inline-Styling durchführen?
Ich habe festgestellt, dass der Ansatz onMouseEnter, onMouseLeave fehlerhaft ist, und hoffe, dass es einen anderen Weg gibt, dies zu tun.
Insbesondere wenn Sie sehr schnell mit der Maus über eine Komponente fahren, wird nur das Ereignis onMouseEnter registriert. Die onMouseLeave wird nie ausgelöst und kann daher den Status nicht aktualisieren. Die Komponente wird so angezeigt, als würde sie immer noch über den Mauszeiger bewegt. Ich habe das Gleiche bemerkt, wenn Sie versuchen, die CSS-Pseudoklasse ": active" nachzuahmen. Wenn Sie sehr schnell klicken, wird nur das Ereignis onMouseDown registriert. Das Ereignis onMouseUp wird ignoriert. Die Komponente bleibt aktiv.
Hier ist eine JSFiddle, die das Problem zeigt: https://jsfiddle.net/y9swecyu/5/
Video von JSFiddle mit Problem: https://vid.me/ZJEO
Der 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')
)