1

我在連接到Firebase的React中構建了一個Web應用程序,該應用程序對用戶進行身份驗證並存儲發佈數據。網上似乎有很多關於使用Redux的文檔,但沒有關於堅持沒有它的狀態的文章。如何在本地存儲中保持狀態React without Redux?

當用戶刷新頁面時,<App />的狀態將重置,因此我需要保留現有狀態/從Firebase中檢索它。一些文章建議使用本地存儲來存儲狀態。但考慮到最佳實踐,應該存儲在本地存儲?我的應用程序將所有狀態存儲在<App />中,並將需要的狀態作爲道具傳遞給相關組件。

以下兩個示例假定用戶已經過身份驗證並剛剛刷新了其頁面。我們希望他們會被保存下來,我們這樣做:

例子#1:

  • 應用加載和檢查最後存儲本地狀態的字符串化的對象本地存儲。將狀態設置爲該狀態或空狀態。
  • 如果檢索並設置了'state',則使用this.state['uid']將狀態與Firebase(讀取)同步,然後再次更新本地存儲狀態。
  • 每當用戶更新某些內容時,請更新狀態(更新Firebase)並更新本地存儲狀態。
  • 當用戶註銷時,清除本地存儲'state'項目。

例子#2:

  • 應用加載,並檢查一個UID本地存儲(其在認證期間設置),如果找到一個,使用與火力(讀取)同步狀態。
  • 如果用戶重新加載頁面,則會從Firebase再次獲取數據。
  • 當用戶註銷時,清除本地存儲'uid'項目。

在第一個例子中,我有效地保留了狀態的兩個副本。一個在React的State中,另一個在瀏覽器的本地存儲中。如果用戶關閉窗口或刷新頁面。

我的問題是:最佳做法是?

或者,正在構建一個React應用程序,它需要在不使用Redux的情況下保持不同路線的用戶和狀態?

在沒有Redux的情況下學習React足夠了一條曲線,所以我試圖看看如果沒有它,我是否可以管理。

回答

1

在你的用例中,redux不會幫你,因爲當用戶刷新頁面時,redux的狀態也會重置。如果你想保持你的應用程序刷新/瀏覽器終止狀態,那麼你需要使用localStorage/sessionStorage/cookies等。

哪個是最好的方法?

那麼我會說第二種方法更好。我會避免在本地存儲中保留狀態的副本。我只會保留某種令牌/編號(在你的情況下爲uid),它可以唯一標識用戶,並且每次都會獲取新的數據。當您的應用程序增長時,可能很難在本地存儲中管理這些狀態。

相關問題