【问题标题】:Checking two variables on condition from localStorage:根据 localStorage 的条件检查两个变量:
【发布时间】:2022-01-12 20:09:55
【问题描述】:

有没有办法检查本地存储中的变量?

Storage {user: 'undefined', new: '{"_id":"61dd228336a3923d2286b994","email":"ahmadsa…","updatedAt":"2022-01-11T06:24:03.675Z","__v":0}', lscache-localhost:preview:v20180702-cacheexpiration: '27376332', lscache-localhost:preview:v20180702: '{}', length: 4}

有时数据可能基于用户登录的用户属性。下面是返回用户属性的登录

   Storage {user: '{"team_members":{"memberFullname1":"memberFullname…","updatedAt":"2022-01-10T01:43:30.288Z","__v":0}', new: 'null', length: 2}

如何创建条件来检查两个属性并仅返回包含值的属性?

基于用户登录,我只能使用一个新变量或用户变量。在从 localStorage 渲染我的数据之前,我是否可以检查两个条件?

这是我尝试的方法。但它只检查第一个条件,即使存在第二个条件,它也会返回。 Json.parse() 中未捕获的错误

if (typeof Storage !== "undefined") {
  if (localStorage.getItem("new")) {
    setUser(JSON.parse(window.localStorage.getItem("new")));
  } else if (localStorage.getItem("user")) {
    setUser(JSON.parse(window.localStorage.getItem("user")));
  }
  return;
}

有没有办法检查这两个条件?你的时间真的很感激。请问我是兄弟需要.. 最后,我怎样才能防止重新渲染状态

【问题讨论】:

  • 您的 Json 格式是否正确?由于您在第一个 JSON.parse() 上遇到错误
  • 是的。问题来自 localstorage.getItem("new") 如果新用户存在(数据)来自服务器并且我调用 JSON.parse(localstorage.get("new") 那么我的数据检索成功。但是有有时数据可能不在“新”上,它将在“用户”上。基于那里登录...这就是为什么我想在渲染之前检查。

标签: javascript reactjs react-hooks local-storage jsonparser


【解决方案1】:

如果user未定义,则执行new,如果未定义,则执行{},解析。

if (typeof Storage !== "undefined") {
  setUser(JSON.parse(localStorage.user || localStorage.new || '{}'));
}

不过,如果您查看 new,它与 user 的结构不同,因此您可能需要修复它们,否则它们不是一回事。

【讨论】:

    【解决方案2】:

    我发现这些代码允许我检查这两个条件并且它没有像上一个那样返回错误。

       useEffect(() => {
        const fetchStates = async () => {
          const result = await axios(
            "https://nigerian-states-info.herokuapp.com/api/v1/states"
          );
          setStates(result.data.data);
        };
        fetchStates();
        if (localStorage.user === "undefined") {
          return setUser(JSON.parse(localStorage.getItem("new")));
        } else if (localStorage.new === "undefined") {
          return setUser(JSON.parse(localStorage.getItem("user")));
        }
      }, [formData, user]);
    

    经过一番尝试和错误,我终于到达了那部分。我想向所有花时间审查我的问题的人致以诚挚的谢意,即使是那些没有得到回答的人。我非常感谢你,特别是劳伦斯·切罗内,你的想法对塑造我的想法很有帮助。谢谢大家

    【讨论】:

    • 为什么需要formData 作为依赖?似乎不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多