Як ви можете досягти події наведення або активної події в ReactJS, коли ви робите вбудований стиль?
Я виявив, що підхід onMouseEnter, onMouseLeave є помилковим, тому сподіваючись, що існує інший спосіб це зробити.
Зокрема, якщо дуже швидко навести курсор на компонент, реєструється лише подія onMouseEnter. OnMouseLeave ніколи не запускається, і, отже, не може оновити стан ... залишаючи компонент виглядати так, ніби над ним все ще наведено курсор. Я помітив те саме, якщо ви намагаєтеся імітувати псевдо-клас ": css". Якщо натиснути дуже швидко, зареєструватиметься лише подія 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')
)