我在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中使用商店模式?