Я пытаюсь вызвать эту функцию с параметром для сопоставления filterCategories, но у меня возникла эта ошибка.
interface FrontPageComponents {
filterCategories: GetTheActivity[];
}
export class FrontPage extends React.Component<RouteComponentProps<{}>, FrontPageComponents> {
constructor() {
super();
this.state = {filterCategories: []};
}
public sort(event: string) {
console.info(event);
return (
$.ajax({
type: "POST",
url: './Categ/GetFilterCategories',
dataType: 'json',
data: { _event: event },
success: (response) => {
FrontPage.prototype.setState({ //in this line the error
filterCategories: response
}) }
})
);
}
public render() {
return <div>
<Sorting />
</div>;
}
}
в компоненте сортировки я вызываю такую функцию: FrontPage.prototype.sort (event.target.innerText);
Я выполнил оба этих предложения, я получил ту же ошибку даже напрямую. Всегда говорит, что filterCategories не определяет.





Вместо
FrontPage.prototype.setState({
filterCategories: response
})
просто делать
this.setState({ filterCategories: response })
Поскольку вы используете стрелочные функции, this по-прежнему будет правильным.
Я использую его внутри компонента сортировки в функции под названием: select (event: any) {this.setState ({dropdownOpen:! This.state.dropdownOpen, value: event.target.innerText}); FrontPage.prototype.sort (event.target.innerText); }
Причина, по которой this не определен, заключается в том, что если вы вызываете this внутри метода успеха ajax, this обращается к области ответа.
Попробуйте сделать что-то вроде: const that = this; над запросом ajax. После этого в успешном методе вызовите that.setState(...). В этом сценарии that относится к текущему экземпляру компонента.
Я знаю, что это грязное исправление, но оно работает.
FrontPage.prototype.setState.call(this, { ... }). Но почему вы не звоните напрямую вsetState()?