#javascript #reactjs #jsx
#javascript #reactjs #jsx
Вопрос:
Я пытаюсь предоставить изображению прослушиватель addEventListener click
, но это происходит только один раз само по себе, когда локальный хост обновляется, и ничего не происходит после того, как я пытаюсь щелкнуть изображение.
Я добавил window.onload
, чтобы JS выполнялся после загрузки DOM, я также пробовал это в отдельном файле JS, но происходит то же самое.
Код react и javascript:
// React and all other imports
export default function Women() {
//All the image variables in an array
var images = [b1, b10, b11, b4, b5, b6, b7, b8, b9, b2 , b3, b12];
window.onload = function() {
var firstWomen = document.querySelector(".women-product-image").firstChild;
firstWomen.addEventListener("click",
console.log("click successful")
)
}
return (
<div>
{images.map(image =>
<div className="women-product-card" >
<div className="women-product-image">
<img src={image} alt="product-image" width="200px" />
</div>
<div className="women-product-detail">
<h5>Lorem Ipsum</h5>
<p className="women-product-price" >amp;#x20B9;2,999</p>
<button>Add to Cart</button>
<img src={star} width="20px" className="women-star-fav" />
</div>
</div>
)}
</div>
)
}
Когда я сохраняю это, и локальный хост обновляется, он появляется click successful
сам по себе в консоли инструментов разработчика, и когда я пытаюсь щелкнуть первое изображение, ничего не происходит.
Я хочу, чтобы у моего первого изображения был постоянный EventListener, чтобы пользователь нажимал на него столько раз, сколько он каждый раз выдает результат.
Заранее спасибо.
Ответ №1:
вы можете добавить щелчок к изображению напрямую.
// React and all other imports
export default function Women() {
//All the image variables in an array
const images = [b1, b10, b11, b4, b5, b6, b7, b8, b9, b2 , b3, b12];
const onImageClick = () => {
alert('Image clicked')
}
return (
<div>
{images.map((image, index) =>
<div className="women-product-card" >
<div className="women-product-image">
<img src={image} alt="product-image" width="200px" onClick={index === 0 ? onImageClick : null} />
</div>
<div className="women-product-detail">
<h5>Lorem Ipsum</h5>
<p className="women-product-price" >amp;#x20B9;2,999</p>
<button>Add to Cart</button>
<img src={star} width="20px" className="women-star-fav" />
</div>
</div>
)}
</div>
)
}
Комментарии:
1. Спасибо, но я хотел добавить ее только к первому дочернему элементу, но он будет делать это для всех изображений, есть ли способ просто добавить его только к первому изображению?
Ответ №2:
Вы хотели бы добавить onClick
prop к div
women-product-image
классу with . Таким образом, обратный вызов onClick всегда будет доступен. Для того, чтобы добавить реквизит к первому, вы можете использовать индекс, возвращаемый из map
.
Итак, что-то вроде:
{images.map((image, index) =>
<div className="women-product-card" onClick={index === 0 ? () => console.log('clicked!') : null}>
.... // the rest of your code
</div>
Это может быть достигнуто немного более элегантно, но идея, вероятно, будет такой же или похожей
Комментарии:
1. Спасибо, но я хотел добавить onClick prop только для первого дочернего элемента, но это сделает это для всех <div> , есть ли какой-нибудь способ просто добавить его только для первого дочернего элемента?
2. Извините, я как-то пропустил это, обновлю свой ответ