@Pogran

Как передать параметры в метод?

У меня есть вот такой код
constructor(props) {
		super(props);

		this.updateClick = this.updateClick.bind(this);
	}

	updateClick(e) {
		e.preventDefault();
	}

	renderTreeString(key, value) {
		return (
			<div style={{margin: '3px 0'}} key={key} >
				<div className="pull-left" style={{width: '200px'}}><b>{key}</b>: {value}</div>
				<button onClick={this.updateClick('params')} style={{marginLeft: '6px'}} type="button" className="btn btn-primary btn-xs">Update</button>
			</div>
		);
	}


В методе renderTreeString у меня есть событие onClick в котором я вызываю метод updateClick и хочу передать в него параметр. Как это правильно сделать учитывая что в этом же методе я потом слушаю событие(e) ?
  • Вопрос задан
  • 2497 просмотров
Решения вопроса 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Добрый день, чтобы ваш прогресс был более быстрым и полезным, нужно подтягивать знания по нативному js.

Во-первых - onClick={this.updateClick('params')} - что вы ожидаете от такой записи? Давайте поразмышляем: в onClick вы должны передать функцию-обработчик, а вы передаете РЕЗУЛЬТАТ функции this.updateClick так как вызываете ее с ( )

Во-вторых, как вам правильно подсказали, можно использовать .bind для передачи параметров.
Для этого, сначала идем в MDN, читаем. Пытаемся передать функцию с параметром в качестве домашнего задания. Подсказка: .bind ставит ваши параметры в начало. То есть все аргументы сдвигаются (в том числе и "e").

P.S. Если не получится, то можете посмотреть ответ по ссылке.

P.P.S. Очень важно понять, что есть результат работы функции. То есть, в вашем вопросе, вы передавали в onClick - e.preventDefault(), причем именно это, а не "функцию, которая по клику бы срабатывала и происходил бы e.preventDefault()). В случае с bind, вы передаете результат работы функции bind, который является функцией, другими словами - "все корректно, в onClick передается функция".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы