Как вы можете добиться в ReactJS события зависания или активного события, когда вы выполняете встроенные стили?
Я обнаружил, что подход onMouseEnter, onMouseLeave содержит ошибки, поэтому надеюсь, что есть другой способ сделать это.
В частности, если вы очень быстро наведете курсор мыши на компонент, будет зарегистрировано только событие onMouseEnter. OnMouseLeave никогда не срабатывает и, следовательно, не может обновлять состояние ... оставляя компонент так, как будто он все еще находится над ним. Я заметил то же самое, если вы попытаетесь имитировать псевдокласс css ": active". Если щелкнуть очень быстро, будет зарегистрировано только событие onMouseDown. Событие onMouseUp будет проигнорировано ... компонент останется активным.
Вот JSFiddle, показывающий проблему: https://jsfiddle.net/y9swecyu/5/
Видео JSFiddle с проблемой: https://vid.me/ZJEO
Код:
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')
)