Wie schwebt du in ReactJS? - onMouseLeave wurde nicht während des schnellen Mauszeigers registriert

Wie erreichen Sie entweder ein hover-Ereignis oder active-event in ReactJS, wenn Sie inline-styling?

Habe ich festgestellt, dass die onMouseEnter, onMouseLeave Ansatz ist buggy, so hoffen es gibt einen anderen Weg, es zu tun.

Speziell, wenn man mit der Maus über eine Komponente sehr schnell, nur der onMouseEnter-event registriert ist. Die onMouseLeave nie ausgelöst, und so kann es nicht aktualisieren... verlassen Sie die Komponente, um Aussehen, als ob es noch schwebte über. Ich habe bemerkt, die gleiche Sache, wenn Sie versuchen und zu imitieren, der ":active" css-pseudo-Klasse. Wenn Sie auf wirklich schnell, nur das onMouseDown-Ereignis registriert wird. Die onMouseUp-Ereignis wird ignoriert... verlassen die Komponente erscheinen aktiv.

Hier ein JSFiddle zeigt das problem: https://jsfiddle.net/y9swecyu/5/

Video von JSFiddle mit problem: https://vid.me/ZJEO

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')
)

InformationsquelleAutor der Frage HelpMeStackOverflowMyOnlyHope | 2015-05-01

Schreibe einen Kommentar