export class abc extends React.Component<IProps, IState> {
function(name: string) {
console.info("I wish to call this function"+ name);
}
render() {
return (
<div>Hello</div>
);
}
}
Теперь я хочу вызвать метод функции указанного выше компонента в другой класс xyz.ts (который не является реагирующим компонентом). Возможно ли сделать то же самое?
эта функция не имеет названия. Как бы вы назвали это? Кроме того, вызов этого из функции, определенной в другом некомпонентном классе, звучит для меня странно. Не могли бы вы уточнить, что вы хотите сделать?
Если функция это позволяет (и, если вам нужно использовать его в другом компоненте, это очень вероятно), вы можете вынести его за пределы компонента класса и экспортировать отдельно: export function foo() { ... }; export class MyClass extends React.Component { ... };
.
Функция имеет имя, и я хочу вызвать эту функцию, чтобы обновить значение класса компонента из класса, не являющегося компонентом.
Вы можете использовать шаблон слушателя следующим образом:
export interface IListener {
notify: (name:string) => void;
}
export class Listener {
listener : IListener[] = [];
addListener(listener: IListener) {
this.listener.add(listener)
}
notifyListener() {
this.listener.forEach((listener) => {
listener.notify("abc");
});
}
}
export class abc extends React.Component<IProps, IState> implements IListener {
componentDidMount() {
// register this class as a listener
new Listener().addListener(this);
}
public notify(name:string) {
this.test(name);
}
test(name: string) {
console.info("I wish to call this function"+ name);
}
render() {
return (
<div>Hello</div>);
}
}
Вам определенно следует переместить функцию из компонента и экспортировать ее, если вы хотите использовать ее в другом файле ts.
Один из способов — передать вашу функцию дочернему компоненту в качестве реквизита.