Привет всем! У меня возникла проблема с кодом на JavaScript. Пытаюсь перенаправить пользователя на новый компонент, если он уже авторизован. Однако постоянно получаю ошибку, что метод не является функцией. Вот пример кода:
class MyComponent {
initialize() {
authService.checkUserStatus((isLoggedIn) => {
if (isLoggedIn) {
this.redirectToProfile();
}
});
}
handleLogin(formData) {
const { username, password } = formData;
authService.login(username, password);
}
redirectToProfile() {
router.goTo('/profile');
}
}
Может кто-нибудь подсказать, в чем может быть проблема? Заранее спасибо за помощь!
Проблема скорее всего в потере контекста this при вызове callback-функции. Попробуй использовать стрелочную функцию в методе initialize:
initialize() {
authService.checkUserStatus((isLoggedIn) => {
if (isLoggedIn) {
this.redirectToProfile();
}
});
}
Или можно забиндить контекст:
initialize() {
authService.checkUserStatus(function(isLoggedIn) {
if (isLoggedIn) {
this.redirectToProfile();
}
}.bind(this));
}
Это должно решить проблему с вызовом метода.
Слушай, а ты не пробовал использовать класс как компонент фреймворка? Например, в React или Vue такое поведение более естественно. Можно обернуть логику в хуки или методы жизненного цикла компонента. Тогда и с контекстом проблем не будет, и код станет чище.
А еще советую посмотреть, как у тебя создается экземпляр класса. может, ты забыл использовать new MyComponent()? Без new this внутри методов будет undefined, отсюда и ошибка.
в любом случае удачи с отладкой! javascript иногда бывает коварным, но ты обязательно разберешься
Может, проблема в том, как инициализируется компонент? Попробуй добавить конструктор и вызывать initialize() там. Типа:
constructor() {
this.initialize();
}
Еще советую проверить, точно ли authService и router доступны в нужный момент. Иногда такие ошибки из-за асинхронной загрузки модулей бывают.