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),它可以唯一标识用户,并且每次都会获取新的数据。当您的应用程序增长时,可能很难在本地存储中管理这些状态。

相关问题