#javascript #reactjs
#javascript #reactjs
Вопрос:
В моем функциональном компоненте я вызываю две функции, которые выполняют почти одно и то же:
const App = () => {
const handleOnClickFirst = () => {
setValue('first')
}
const handleOnClickSecond = () => {
setValue('second')
}
return (
<div>
{anything === true
? <Button onClick={handleOnClickFirst} />
: <Button onClick={handleOnClickSecond} />}
</div>
)
}
Таким образом, должно быть просто только
const handleOnClick = (value) => {
setValue(value)
}
Но как мне передать значение в onClick
?
Ответ №1:
Как мы знаем, в JSX вы передаете функцию в качестве обработчика событий. Таким образом, мы можем обернуть наш обработчик другой функцией и вызвать обработчик с аргументами в этой функции-оболочке
onClick={(event) => handleOnClick(value)}
или для старых версий мы можем сделать
onClick={function(event){ handleOnClick(value) }}
Если вам не нужны события, вы можете просто передать это следующим образом
onClick={() => handleOnClick(value)}
Также, если это базовый компонент класса, мы используем bind для передачи контекста метода и аргументов
class App extends React.Component {
handleOnClick(val) {
console.log(`${val}`);
}
render() {
return (
<button onClick={this.handleOnClick.bind(this, "test")}>
click me
</button>
);
}
}
Комментарии:
1. Итак,
onclick={handleOnClick}
иonClick={() => handleOnClick()}
совпадают, если параметр не нужен?2.
bind
в данном контексте это больше не актуально, и функции со стрелками можно использовать как для метода класса, так и для встроенных обратных вызовов.3. @user3142695 это то же самое, если
handleOnClick
не принимает параметра.
Ответ №2:
Вы могли бы сделать
onClick={() => handleOnClick(value)}
Редактировать:
Дополнительная информация здесь: https://reactjs.org/docs/faq-functions.html
Ответ №3:
Вы можете сделать это :
<button onClick={(event)=>handleOnClick(<pass your paramter here>)}></button>
Комментарии:
1. где будет происходить событие?
2. Я отредактировал ответ , это то, что вы имели в виду? или вы имеете в виду какое-то другое событие?
Ответ №4:
Попробуйте это:
const App = () => {
const handleOnClick = (passedInValue) => {
setValue(passedInValue)
}
return (
<div>
{anything === true
? <Button onClick={() => handleOnClick("first")} />
: <Button onClick={() => handleOnClick("second")} />}
</div>
)
}