1

Ich habe einen einfachen Benutzerspeicher in Vue 2 implementiert, um den aktuell authentifizierten Benutzer zu verfolgen.HMR seltsames Verhalten in Safari mit Speichermuster - Vue2

Es sieht wie folgt aus:

const user = { 
    isGuest: true, 

    state: { 
    name: '' 
    }, 

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

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

Ich habe auch eine einfache Authentifizierungsdienst (als Plugin implementiert), die den Benutzer aus der api holt und speichert ihn in den Laden. Immer wenn sich der Benutzer anmeldet oder die App geladen wird, holt der Authentifizierungsdienst den Benutzer und speichert ihn im Geschäft.

Ich versuche, von einer anderen Komponente (meine Navbar) auf den Laden zuzugreifen. Ich habe dies in meiner Komponente die Users zu importieren:

import user from '../store/user' 

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

Das ist alles wirklich gut in Chrome arbeiten und in Firefox.

jedoch in Safari ich einige seltsame Verhalten erhalten:

Wenn ich die navbar Daten zwingen, eine heiße reload zu tun, indem die Navbar.vue Datei zu speichern, werden die Daten aus dem Speicher geholt. In allen anderen Fällen (Neuladen der Seite oder nach einer Vue-Router-Umleitung nach der Anmeldung) werden die Daten der Navigationsleiste nicht mit dem aktuellen Benutzerspeicher aktualisiert.

Wie kann ich das beheben, um in allen Browsern zu funktionieren?

EDIT:

ich ein wenig mehr Informationen haben:

Wenn ich auf die Schaltfläche Aktualisieren in Safari sitzen, zufällig manchmal bekomme ich die Daten korrekt aus dem Benutzerspeicher übertragen, und nach dem Zufall Ich nicht.

Meine Ahnung ist, dass manchmal der API-Aufruf schnell genug zurückkehrt, damit die Daten verfügbar sind, wenn die Navbar-Daten gerendert werden, und manchmal nicht.

In anderen Browsern werden die reaktiven Daten aktualisiert, wenn die Daten verfügbar sind, auch wenn die Daten beim Laden nicht verfügbar sind. Dies ist nicht der Fall in Safari aus irgendeinem Grund (außer, dass das heiße reload funktioniert, wenn ich es erzwingen, indem erneut das Speichern der Datei zu aktualisieren)

EDIT # 2:

ich, dass dies bestätigen können, ist das Problem. Meine Daten werden nicht aktualisiert, wenn der Shop aktualisiert wird.

Ich habe dies bewiesen, indem ich die Navbar-Komponente für 2 Sekunden schlafen ließ, bevor ich Daten aus dem Geschäft holte, und sicher genug, dass die Daten jedes Mal in Safari korrekt ausgefüllt wurden.

So wird die Frage jetzt grundlegender, wie kann ich das Speichermuster in Safari verwenden?

Antwort

0

Ich habe die Wurzel des Problems gefunden.

Ich habe tatsächlich ein Proxy-Objekt im Laden verwendet. Anscheinend hat das alles nur in Safari versaut. Ohne es funktioniert alles gut.