В документации нет четкого указания, и ваше решение будет работать, но действительно не очень элегантно. Я предпочитаю использовать каррирование в самом блоке script.
const handleClick = (parameter) => () => {
// actual function
}
А в HTML
<button on:click={handleClick('parameter1')>
It works...
</button>
Остерегайтесь каррирования
Как упоминалось в комментариях, у каррирования есть свои подводные камни. Самый распространенный из них, который в приведенном выше примере handleClick('parameter1')
не запускается при нажатии, а скорее при рендеринге, возвращая функцию, которая, в свою очередь, запускается при нажатии. Это означает, что эта функция всегда будет использовать «параметр1» в качестве аргумента.
Поэтому использование этого метода будет безопасным только в том случае, если используемый параметр является некоторой константой и не изменится после рендеринга.
Это привело бы меня к другому вопросу:
1) Если это константа, использующая параметр, вы также можете использовать отдельную функцию
const handleParameter1Click = () => handleClick('parameter1');
2) Если значение динамическое, но доступно в компоненте, это все равно можно обработать с помощью отдельной функции:
let parameter1;
const handleParameter1Click = () => handleClick(parameter1);
3) Если значение является динамическим, но недоступно из компонента, потому что оно зависит от какой-либо области (например, список элементов, отображаемых в блоке #each), будет работать 'хакерский' подход. лучше. Однако я думаю, что в этом случае было бы лучше иметь элементы списка в качестве самих компонентов и вернуться к случаю №2.
В заключение: каррирование будет работать при определенных обстоятельствах, но не рекомендуется, если вы не очень хорошо осведомлены и осторожны в том, как его использовать.
person
Stephane Vanraes
schedule
07.10.2019
on:click{() => clickHandler(param)}
в том, как Рич сказал выше, как это работает, потому что нужно передать ссылку на функцию, которую нужно выполнить. Вызываяon:click{clickHandler(param)}
, вы немедленно выполняете функцию. Это не то, что вам нужно. - person solidstatejake   schedule 24.08.2020