React js onClick не может передать значение методу

Я понимаю, что это старый вопрос, но если кто-то все еще ищет его, вы можете сделать это легко с помощью Resharper 8+. Фрагменты ctorf, ctorp и ctorfp генерируют конструкторы, которые заполняют все поля, свойства или поля и свойства класса.

506
задан user1924375 2 May 2018 в 09:36
поделиться

3 ответа

существует несколько способов передать параметр в обработчиках событий, некоторые следуют.

можно использовать функцию стрелки для переноса параметров передачи и обработчика событий:

<button onClick={() => this.handleClick(id)} />

выше примера эквивалентно вызову .bind, или можно явно звонить, связывают.

<button onClick={this.handleClick.bind(this, id)} />

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

handleClick = (id) => () => {
    console.log("Hello, your ticket number is", id)
};

<button onClick={this.handleClick(id)} />
0
ответ дан Umair Ahmed 4 November 2019 в 07:55
поделиться
  • 1
    @Stephen - спасибо за исправление. I' ve никогда не использовал маркированные повреждения и отчасти предположил, что они имели в виду " повредитесь к этому label" и не " убегите из этого label". – Edmund 14 April 2010 в 06:38

Появление откуда ни возьмись к этому вопросу, но я думаю .bind, добьется цели. См. ниже пример кода.

const handleClick = (data) => {
    console.log(data)
}

<button onClick={handleClick.bind(null, { title: 'mytitle', id: '12345' })}>Login</button>
0
ответ дан 22 November 2019 в 22:13
поделиться

Было много соображений производительности, всех в вакууме.
проблема с этим обработчики - то, что необходимо приправить их карри для слияния аргумента, что Вы не можете назвать в опорах.
Это означает, что компоненту нужен обработчик для каждого активируемого по щелчку элемента. Давайте согласимся, что для нескольких кнопок это не проблема, правильно?
проблема возникает при обработке табличных данных с десятками столбцов и тысячами строк. Там Вы замечаете влияние создания что много обработчиков.

факт, мне только нужен тот.
я установил обработчик на уровне таблицы (или УЛ. или OL...), и когда щелчок происходит, я могу сказать, который был нажатой ячейкой с помощью доступных данных с тех пор когда-либо в конечном счете объект:

nativeEvent.target.tagName
nativeEvent.target.parentElement.tagName 
nativeEvent.target.parentElement.rowIndex
nativeEvent.target.cellIndex
nativeEvent.target.textContent

я использую tagname поля, чтобы проверить, что щелчок произошел в допустимом элементе, например, проигнорируйте щелчки в ТЫС ot нижние колонтитулы.
rowIndex и cellIndex дают точное местоположение нажатой ячейки.
Textcontent является текстом нажатой ячейки.

Этот способ, которым я не должен передавать данные ячейки обработчику, они могут самообслуживание это.
, Если мне было нужно больше данных, данные, которые не должны быть отображены, я могу использовать атрибут набора данных или скрытые элементы.
С некоторой простой навигацией DOM это - все под рукой.
Это использовалось в HTML с тех пор когда-либо, так как ПК были намного легче тонуть в трясине.

0
ответ дан 22 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: