如何为每个唯一用户而不是 localStorage 实现持久化?

问题描述

我有一个配方生成器 CRUD 类型的应用程序。主窗口显示用户当前的食谱,用户可以点击添加成分按钮,并根据自己的喜好编辑他的食谱。

使用 localStorage,我实现了页面刷新的持久性,并且一切正常。

配料选择组件:

// This code below is for choosing a single ingredient. useEffect runs when I add,remove or update ingredient.

  useEffect(() => {
    // more code here
    localStorage.setItem("recipe",JSON.stringify(selectedRecipe));
    history.push("/recipewindow");
  },[history,selectedRecipe]);

主要配方显示组件:

//This code below is for my main window,where the full recipe is displayed. useEffect runs when
component is mounted

  useEffect(() => {
    const stateData = localStorage.getItem("recipe");
    stateData && setSelectedRecipe(JSON.parse(stateData));
    console.log(JSON.parse(stateData));
  },[setSelectedRecipe]);

然而,在我的应用程序中实现用户身份验证后,我才意识到 localStorage 存储相同的数据而不管用户如何,所以如果我有 3 个不同的帐户,它们都会有相同的配方窗口。

如何实现每个唯一用户的持久化?

我是否像这样将数据放入 Firestore 数据库用户集合/user1234/current_recipe并继续存储和监听来自前端的更改,还是会太慢?

解决方法

您真的不应该为此使用本地存储。本地存储效率低下。

所有数据都应该存储在某个数据库中,并根据需要下载。

如果你想跨组件保留状态,一个不错的选择是使用 redux 之类的东西(你也可以使用上下文,但 redux 有更多的特性,可以防止很多潜在的错误,也可以在 react 之外使用),但是每次您的用户重新加载他们的页面时,该页面的内容都应该从外部 api 下载。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...