【发布时间】:2019-10-14 18:44:33
【问题描述】:
我正在尝试向我的应用程序添加一个收藏页面,它基本上会列出一些以前插入的数据。我希望从 localStorage 中获取数据。它基本上可以工作,但是当我导航到另一个页面并返回时,localStorage 再次为空。我希望 localStorage 中的数据在应用程序刷新时保持不变。
数据从这里设置到localStorage
import React, { useState, createContext, useEffect } from 'react'
export const CombinationContext = createContext();
const CombinationContextProvider = (props) => {
let [combination, setCombination] = useState({
baseLayer: '',
condiment: '',
mixing: '',
seasoning: '',
shell: ''
});
const saveCombination = (baseLayer, condiment, mixing, seasoning, shell) => {
setCombination(combination = { baseLayer: baseLayer, condiment: condiment, mixing: mixing, seasoning: seasoning, shell: shell });
}
let [combinationArray, setCombinationArray] = useState([]);
useEffect(() => {
combinationArray.push(combination);
localStorage.setItem('combinations', JSON.stringify(combinationArray));
}, [combination]);
return (
<CombinationContext.Provider value={{combination, saveCombination}}>
{ props.children }
</CombinationContext.Provider>
);
}
export default CombinationContextProvider;
并从这里获取
import React, { useContext, useState } from 'react'
import { NavContext } from '../contexts/NavContext';
const Favorites = () => {
let { toggleNav } = useContext(NavContext);
let [favorites, setFavorites] = useState(localStorage.getItem('combinations'));
console.log(favorites);
return (
<div className="favorites" >
<img className="menu" src={require("../img/tacomenu.png")} onClick={toggleNav} />
<div className="favorites-title">YOUR FAVORITES</div>
<div>{ favorites }</div>
</div>
);
}
export default Favorites;
【问题讨论】:
-
在从本地存储加载数据之前,您似乎正在用空数据覆盖本地存储。熟悉 React 的 component lifecycle,以确保在生命周期的正确时间调用 getItem 和 setItem 方法。
标签: reactjs react-hooks