1

Я реализовал простое хранилище пользователей в Vue 2, чтобы отслеживать пользователя, прошедшего проверку подлинности.Неожиданное поведение HMR в Safari с шаблоном магазина - Vue2

Это выглядит следующим образом:

const user = { 
    isGuest: true, 

    state: { 
    name: '' 
    }, 

    save (user) { 
    this.isGuest = false 
    this.state = user 
    }, 

    clear() { 
    this.isGuest = true 
    this.state = { } 
    } 
} 

У меня есть простая служба аутентификации (реализовано в виде плагина), который извлекает пользователь из API и сохраняет его в магазин. Всякий раз, когда пользователь входит в систему, или приложение загружается, служба auth извлекает пользователя и сохраняет его в хранилище.

Я пытаюсь получить доступ к магазину из другого компонента (мой навигатор). У меня это в моем компоненте импортировать userStore:

import user from '../store/user' 

export default { 
    data() { 
    return { 
     user 
    } 
    } 
} 

Это все работает очень хорошо в Chrome и Firefox.

Однако в Safari я получаю некоторое странное поведение:

Если я заставляю данные навигационных панели, чтобы сделать горячую перезагрузку, сохранив файл Navbar.vue, данные извлекаются из магазина. Однако во всех остальных случаях (перезагрузка страницы или после перенаправления vue-router после входа в систему) данные навигатора не обновляются в текущем хранилище пользователей.

Как я могу исправить это для работы во всех браузерах?

EDIT:

У меня есть немного больше информации:

Если Сижу на кнопку обновления в Safari, случайно я иногда получить правильно оказанные данные из хранилища пользователя, и случайным образом Я не.

Моя догадка заключается в том, что иногда api-вызов возвращает достаточно быстро, чтобы данные были доступны, когда данные навигатора отображаются, а иногда нет.

В других браузерах, даже когда данные недоступны при загрузке, они обновляются, когда данные становятся доступными. Это не тот случай в Safari по какой-то причине (кроме того, что горячая перезагрузка работает, если я заставляю его обновить, повторно сохранить файл)

EDIT # 2:

Я могу подтвердить, что это это проблема. Мои данные не обновляются при обновлении хранилища.

Я доказал это, если компонент навигационной системы засыпает в течение 2 секунд перед извлечением данных из магазина, и, конечно же, данные заполняются правильно каждый раз сейчас в Safari.

Итак, теперь вопрос становится более фундаментальным, как я могу использовать шаблон магазина в Safari?

ответ

0

Я нашел корень проблемы.

Я фактически использовал прокси-объект вокруг магазина. Видимо, это испортило дело только в Сафари. Без него все работает нормально.