Без параметра
function clickMe(e){
//e is the event
}
<button onClick={this.clickMe}></button>
С параметром
function clickMe(parameter){
//how to get the "e" ?
}
<button onClick={() => this.clickMe(someparameter)}></button>
Я хочу получить event
. Как я могу это получить?
javascript
reactjs
events
dom-events
IMOBAMA
источник
источник
onClick={(e) => { this.clickMe(e, someparameter) }}
data-*
атрибуты в HTML5. Пожалуйста, смотрите мой ответ ниже для более подробной информации.С ES6 вы можете сделать это более коротким способом:
const clickMe = (parameter) => (event) => { // Do something }
И используйте это:
источник
onClick={(e) => clickMe(someParameter)(e)}
const clickMe = (parameter) => (event) => {...}
вместо этогоconst clickMe = (parameter) => {...}
?Решение 1
function clickMe(parameter, event){ } <button onClick={(event) => {this.clickMe(someparameter, event)}></button>
Решение 2 Использование функции привязки считается лучше, чем использование функции стрелки в решении 1. Обратите внимание, что параметр события должен быть последним параметром в функции-обработчике.
function clickMe(parameter, event){ } <button onClick={this.clickMe.bind(this, someParameter)}></button>
источник
Чтобы полностью решить проблему создания нового обратного вызова, используйте
data-*
атрибуты в HTML5 - лучшее решение IMO. Поскольку в конце дня, даже если вы извлекаете подкомпонент для передачи параметров, он все равно создает новые функции.Например,
const handleBtnClick = e => { const { id } = JSON.parse(e.target.dataset.onclickparam); // ... }; <button onClick={handleBtnClick} data-onclickparam={JSON.stringify({ id: 0 })}>
См. Https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes для использования
data-*
атрибутов.источник
Карринг с примером ES6:
const clickHandler = param => event => { console.log(param); // your parameter console.log(event.type); // event type, e.g.: click, etc. };
Наша кнопка, которая переключает обработчик:
<button onClick={(e) => clickHandler(1)(e)}>Click me!</button>
Если вы хотите вызвать это выражение функции без объекта события, вы бы назвали его так:
clickHandler(1)();
Кроме того, поскольку в реакции используются синтетические события (оболочка для собственных событий), существует функция объединения событий , что означает, что если вы хотите использовать свой
event
объект асинхронно, вам придется использоватьevent.persist()
:const clickHandler = param => event => { event.persist(); console.log(event.target); setTimeout(() => console.log(event.target), 1000); // won't be null, otherwise if you haven't used event.persist() it would be null. };
Вот живой пример: https://codesandbox.io/s/compassionate-joliot-4eblc?fontsize=14&hidenavigation=1&theme=dark
источник
event.persist()
с собой,console.log(event)
но мне это не нужноconsole.log(event.target)
?let event;
он не выдаст неопределенную ошибку.