Каков рекомендуемый подход для передачи аргумента обработчику нажатия кнопки svelte?
Вариант использования — повторяющаяся кнопка внутри каждого списка. Из того, что я могу сказать, в документации показаны только примеры того, как работать с одной кнопкой, когда вы можете использовать глобальную переменную для передачи данных. Это не так практично, если вы штампуете список кнопок в сетке.
Пример:
{#each comments as c}
<div class = "comment-block">
<div class = "comment"> {c.text} </div>
<!-- How can I pass c.id to the approveComment handler? -->
<button on:click = "{approveComment}">Approve</button>
</div>
{/each}
<script>
function approveComment() {
// how can I pass an id to this method
}
</script>
Одним из решений является перемещение содержимого блока each
в другой компонент и передача объекта комментария в качестве реквизита, но мне любопытно, можете ли вы привязать входное значение к обработчику кнопки на итерацию в цикле.
Функция approveComment
имеет событие в качестве аргумента. Измените объявление функции на:
function approveComment(event) {
// now you can access event.target where you can store
// the id from your button, e.g.:
const id = event.target.value;
console.info(id);
}
Вам также необходимо объявить c.id в свойстве value вашей кнопки:
<button on:click = {approveComment} value = {c.id}>Approve</button>