【问题标题】:How to set a JSON object from local.storage using setState with React Hooks如何使用带有 React Hooks 的 setState 从 local.storage 设置 JSON 对象
【发布时间】:2020-07-24 11:34:56
【问题描述】:

考虑以下问题 - 我有一个条件检查 local storage 是否有 JSON object,如果不存在,则将其设置在本地存储中:

设置正确:

但是如果它确实存在,我想从本地存储中获取它并使用useState 将其设置为我的状态:

export default function Day({ dayInfo }) {


var [dayInfoInChild, setDayInfoInChild] = useState([]);

  useEffect(() => {
    if (dayInfo !== null) {
      var modifiedDayInfo = dayInfo
        .split(' ')
        .map((item) => {
          if (item.indexOf(',')) return item.replace(/,/g, '');
        })
        .join('-');

      if (localStorage.getItem(modifiedDayInfo)) {
        setDayInfoInChild((dayInfoInChild) => [
          ...dayInfoInChild,
          modifiedDayInfo,
        ]);
        console.log('dayInfoInChild', dayInfoInChild);
      } else {
        localStorage.setItem(modifiedDayInfo, JSON.stringify({}));
      }
    }
  }, [dayInfo]);

日志返回:

`dayInfoInChild` ["April-2-2020", "April-3-2020"]

我希望它是:

`dayInfoInChild` ["April-2-2020" : "{}", "April-3-2020": "{}"]`

这是如何实现的?欢迎黑魔法...

【问题讨论】:

    标签: reactjs local-storage react-hooks use-state


    【解决方案1】:

    看来你只推到状态modifiedDayInfo

    您还必须从本地存储中获取价值:

    我没有测试过,但应该是这样的

     setDayInfoInChild((dayInfoInChild) => [
                  ...dayInfoInChild,
                  {[modifiedDayInfo],JSON.parse(localStorage.getItem("April-2"))},
                ]);
    

    在代码中:

    export default function Day({ dayInfo }) {
    
    
    var [dayInfoInChild, setDayInfoInChild] = useState([]);
    
      useEffect(() => {
        if (dayInfo !== null) {
          var modifiedDayInfo = dayInfo
            .split(' ')
            .map((item) => {
              if (item.indexOf(',')) return item.replace(/,/g, '');
            })
            .join('-');
    
          if (localStorage.getItem(modifiedDayInfo)) {
            setDayInfoInChild((dayInfoInChild) => [
              ...dayInfoInChild,
              {[modifiedDayInfo],JSON.parse(localStorage.getItem("April-2"))
             },
            ]);
            console.log('dayInfoInChild', dayInfoInChild);
          } else {
            localStorage.setItem(modifiedDayInfo, JSON.stringify({}));
          }
        }
      }, [dayInfo]);
    

    希望对你有帮助!

    【讨论】:

    • 感谢 Esther 成功了,但你会说我的组件中的状态应该是 {} 即 JavaScript 对象而不是数组 [],因为这样在语义上,我可以镜像 local-storage例如var localStorage = { key : value} 及以后的localStorage = { april-2: {...data about april 2}}
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2021-02-21
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2020-01-07
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多