В моем состоянии хранятся объекты (рабочие элементы) с различными атрибутами, такими как идентификатор, заголовок, описание и т. Д. Я отображаю их в моем рендере в таблице, чтобы сделать их видимыми. Все идет нормально. Но когда я пытаюсь объявить «onClick» внутри функции карты, он будет срабатывать не только для конкретного элемента, на котором был выполнен щелчок, но и для всех объектов рабочих элементов на карте.
В моем рендере;
{workitem.company ? workitem.company + " - " : ""}
<a href={workitem.url} target="_blank">{workitem.title}</a>
<div className="description pt-2" onClick= {this.descriptionPopOut(workitem.description)> // My onclick function
<strong>Description: </strong>
{workitem.description ? this.trimWord(workitem.description.replace("...", ""), 850, "...")
: ""}{" "}
...
</div>
OnClick приведет к очень простой функции, которая имеет предупреждение и примет описание объекта в качестве ввода.
descriptionPopOut = (description) => {
alert(description);
}
Выше будет отображаться предупреждение со всем свойством описания объекта, а не для конкретного элемента, который был нажат. Есть ли способ решить это?
3 ответа
Это потому, что при каждом рендере ваша функция вызывает i.e
this.descriptionPopOut(workitem.description)
, Пока вы хотите позвонить, когда вы нажимаете. Вы можете либо связать функцию, чтобы использовать ее позже при нажатии:
this.descriptionPopOut.bind(this, workitem.description)
Или вы можете использовать функцию жирной стрелки, чтобы вернуть функцию, т.е.
onClick = {() => this.descriptionPopOut(workitem.description)>
(Он гарантирует, что он создает ссылку на функцию, и когда вы щелкаете по ней, она вызывает вашу функцию с определенным параметром)
Проблема в том, что вы неправильно вызываете свою функцию.
Не делай этого onClick = {this.descriptionPopOut(workitem.description)>
Поскольку вы хотите передать параметр, сделайте это
onClick = {() => this.descriptionPopOut(workitem.description)>
Вы вызываете функцию в каждой итерации.
Попробуйте сделать так:
this.descriptionPopOut.bind(this, workitem.description)
Похожие вопросы
Новые вопросы
javascript
Для вопросов, касающихся программирования в ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (исключая ActionScript). Этот тег редко используется отдельно, но чаще всего ассоциируется с тегами [node.js], [jquery], [json] и [html].