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服務都會提取用戶並將其保存到商店中。

我想從另一個組件(我的導航欄)訪問商店。我有我的組件導入用戶存儲:

import user from '../store/user' 

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

這一切在Chrome和Firefox中都非常好用。

然而,在Safari我得到一些奇怪的行爲:

如果我強迫導航欄的數據被保存Navbar.vue文件做一個熱重載,該數據從存儲中提取。但是,在所有其他情況下(頁面重新加載或在登錄後vue-router重定向後),導航欄的數據不會與當前用戶存儲一起更新。

我該如何解決這個問題,以適應所有瀏覽器?

編輯:

我有一點點的更多信息:

如果我坐在在Safari的刷新按鈕,隨機我有時會從用戶存儲的正確呈現數據,並隨機我不。

我的預感是,有時api調用返回的速度足以讓數據在導航欄數據呈現時可用,有時卻不會。

在其他瀏覽器中,即使數據在加載時不可用,它也會在數據可用時更新被動數據。這不是在Safari中由於某種原因的情況下(只是如果我強迫它通過重新保存該文件以更新熱重裝不工作)

編輯#2:

我可以證實,這是問題。當商店更新時,我的數據不會更新。

我通過讓導航欄組件在從存儲中獲取數據前休眠2秒來證明這一點,並且確實已足夠正確地在Safari中每一次都正確地填充數據。

所以現在問題變得更加基礎了,我該如何在Safari中使用商店模式?

回答

0

我發現問題的根源。

我實際上是在商店周圍使用代理對象。顯然這只是在Safari中搞砸了。沒有它,一切正常。