Есть ли способ сделать обработчик событий, определенный в компоненте React, доступным в HTML-подобном теге? Я имею в виду что-то вроде:
<MyComp param1="abc" param2="def" onDoSomething={this.someMethod} />
Моя цель — определить onDoSomething
, но в настоящее время я знаю только, как создавать такие параметры, как param1
и param2
.
export interface MyCompProps {
param1: string;
param2: string;
}
export interface DoSomethingEvent {
someParam: string;
}
export class MyComp extends React.Component<MyCompProps, {}> {
private doSomethingDispatcher = new EventDispatcher<DoSomethingEvent>();
public onDoSomething(handler: Handler<DoSomethingEvent>) {
this.doSomethingDispatcher.register(handler);
}
private fireDoSomething(param: string) {
this.doSomethingDispatcher.fire({someParam: param});
}
}
Как я могу сделать обработчик события onDoSomething
доступным через TSX, аналогично использованию события onClick
?
onDoSomething
в качестве еще одного члена вMyCompProps
?onDoSomething: (Handler<DoSomethingEvent>) => void;
- person miqh   schedule 23.11.2018MyCompProps
, напримерonDoSomething: (Handler<PageChangedEvent>);
. Но при запускеfireDoSomething
на другой стороне ничего не происходит. МетодsomeMethod()
не срабатывает. ДобавлениеonDoSomething: (Handler<DoSomethingEvent>) => void;
приводит к ошибке[ts] ";" expected. [1005]
. Любая идея, как еще заставить это работать? - person Socrates   schedule 23.11.2018(handler: Handler<DoSomethingEvent>) => void;
. Кроме того, заметил ваш другой комментарий ниже о том, как связанsomeMethod()
. Я не думаю, что вам не следует использовать()
, так как это преждевременно вызовет метод и привяжет результат метода, а не метод, к реквизиту. - person miqh   schedule 23.11.2018MyCompProps
файлаonDoSomething: (handler: Handler<DoSomethingEvent>) => void;
. На родительской стороне<MyComp param1="abc" param2="def" onDoSomething={this.someMethod} />
также компилируется, но методsomeMethod
никогда не запускается. Должен ли я подключать обработчик событий где-то в реквизите? - person Socrates   schedule 23.11.2018onDoSomething: (someParamName: string) => void;
вMyCompProps
. Затем, чтобы вызвать это, я добавилthis.props.onDoSomething("some message");
к методуfireDoSomething
. Работает как шарм, когда все сделано правильно. Еще раз большое спасибо за вашу помощь! - person Socrates   schedule 23.11.2018