Как вернуть идентификатор из onClick в функции React

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть настройка шаблона в функции, и я хочу, чтобы он передавал свой идентификатор при нажатии, но каким-то образом, как я его настроил сейчас, он щелкается при загрузке элемента, и я не могу щелкнуть его после этого.

 import React from 'react'

function PortItem(props){
    return(
        <div className="portItem" onClick={props.click(props.pitem.id)}>
            <img src={props.pitem.src} alt={props.pitem.title}></img>
        </div>
    )
}

export default PortItem
 

Консоль.журнал регистрирует правильный идентификатор, но делает это сразу после загрузки элемента.

 import React from 'react'
import portData from "./portData"
import PortItem from "./portItem"

function PortfolioPage() {
    const handleClick = (id) => {
        console.log(id)
    }

    const portItems = portData.map(item => <PortItem key={item.id} pitem={item} click={handleClick}/>)

    return (
        <div>
            {portItems} 
        </div>
    )
}

export default PortfolioPage
 

Как мне заставить его вести себя так, как вы ожидаете? Чтобы при нажатии на div с именем класса «portItem» он передавал свой идентификатор в handleClick?

Ответ №1:

Вам нужно сделать:

 <div className="portItem" onClick={()=>props.click(props.pitem.id)}>
 

Это гарантирует, что вызывается только тогда, когда мы нажимаем на div функцию обработчика, а также значение передается обработчику.

Это общий способ передачи значений обработчикам, где мы в основном используем функцию внутри Synthetic Event (в вашем случае onClick )

 onEvent={()=>{handlerFunction(value)}}
 

Ответ №2:

Вы вызываете его каждый раз, когда элемент отображается. Вы должны изменить его на:

 <div className="portItem" onClick={() => props.click(props.pitem.id)}>