Я пытаюсь отобразить div, когда мышь находится над другим элементом div.Мне удалось сделать это через onMouseEnter и onMouseLeave.
Проблема здесь в том, что если вы быстро переходите от одного div к другому (это массив div, который содержит данные о продукте), значение индекса[0] становится истинным.
То, как это работает, заключается в том, что у меня есть массив, инициализированный как ложный, когда мышь входит в один из них, он становится истинным и показывает нужный мне div.Как только он уходит, он устанавливает его обратно в ложь.
this.state = {
isProductsHovering: new Array(this.props.currentProducts.length).fill(false)
};
handleMouseHover = (idx) => {
this.setState({
isProductsHovering: update(this.state.isProductsHovering, {
[idx]: { $set: !this.state.isProductsHovering[idx] }
})
})
}
render() {
return this.props.currentProducts.map((product, idx) => {
return <Fragment key={idx}>
<div className="product-grid-view col-6 col-md-4" >
<div
className=" product-holder"
onMouseEnter={this.handleMouseHover.bind(this, idx)}
onMouseLeave={this.handleMouseHover.bind(this, idx)}>
<div className="image-container" align="center">
<img src={"/img/product-3.jpg"} alt="" />
{
this.state.isProductsHovering[idx] &&
<div className="product-buttons">
<Link to={`products/${product.id}`} className="btn-detail" text="View Details" />
<Link to='#' className="btn-cart" icons={["icon-cart", "icon-plus"]} />
</div>
}
</div>
<div className="details-holder">
<span className="part-text">{product.desc}</span><br />
<span className="manufacturer-text">{product.manufacturer.name}</span>
<div className="product-review_slide">
<Stars values={product.averageRating} {...starsRating} />
<span className="product-review">{getLength(product.reviews)} review</span>
</div>
<span className="product-price">{product.salesPrice.toFixed(2)}</span>
<span className="product-currency">SR</span>
</div>
</div>
</div>
</Fragment>
})
}
Обновление
Я создал проект stackblitz, чтобы воспроизвести ту же проблему, как предложено:
https://stackblitz.com/edit/react-mouse-hover.
Для всех, кто хочет понять, что я имею в виду.Я приложил фотографию вопроса.Если вы подведете указатель мыши к двум элементам (как можно быстрее вверх и вниз), вот что произойдет:
перерыв мыши при наведении