#typescript #events #event-handling
#машинописный текст #Мероприятия #обработка событий
Вопрос:
Может быть, это простой вопрос, но у меня есть событие, давайте назовем его addObject
. Я испускаю это событие, и у меня есть два слушателя для него. Один слушатель требует, чтобы константа «важный объект» была передана, но другой этого не делает. Так что у меня есть что-то вроде
myFunction1() { const importantObject = {...}; // other logic this.emit('addObject'); this.emit('addObjectWithParam', importantObject); } myFunction2() { //other logic const forceUpdate = this.forceUpdate.bind(this); this.addListener('addObject', forceUpdate); } myFunction3() { this.addListener( 'addAuditTest', this.handlerFunction.bind(this), ); }
Это похоже на преодоление барьера абстракции, дважды испустив «AddObject», но я делаю это, потому forceUpdate()
что не принимает параметров, но мне это нужно importantObject
handlerFunction()
.
Что здесь самое чистое/лучшие практики?
Ответ №1:
Это скорее вопрос более высокого уровня, но я постараюсь ответить как можно лучше.
Просто вопрос, который я бы задал себе с точки зрения «бизнеса» или «домена», являются ли они одним и тем же событием или нет.
С точки зрения обработки событий / событий не должно иметь значения, нужны ли слушателю аргументы события. Важно то, каковы сами события.
Возьмем пример одного события onSelect
. Теперь это событие будет происходить каждый раз, когда пользователь изменяет раскрывающееся поле. Он будет проходить через новое значение, выбранное пользователем.
У меня есть два потребителя:
- Вызов api с выбором пользователей. Для этого потребуется выбранное значение
- Вызов API аналитики показывает, что пользователь изменил свой выбор. Для этого может не потребоваться значение выбора.
В этом случае, если потребителю все равно, он просто игнорирует аргумент. Нам не нужно предоставлять разные мероприятия для одного и того же onSelect
.
Однако вам нужно убедиться, что они действительно одинаковы. Другой пример-это onMouseUp
vs onClick
.
onClick
Событие может не иметь аргумента, так как оно просто информирует о том, что пользователь нажал кнопку. Где, как onMouseUp
может быть, есть информация о местоположении мыши или что-то еще.
Они оба могут быть использованы для обнаружения щелчка, но это принципиально разные события.
Вам просто нужно выяснить, являются ли они одним и тем же событием с разными потребностями потребителей или одним и тем же событием.