求助:React中useEffect结合localStorage刷新后数据无法持久化
菜谱项目数据持久化问题:刷新后修改无法保留
我跟着教程开发菜谱前端项目,遇到数据持久化问题:删除默认菜谱、添加新菜谱后,页面刷新会恢复默认数据,无法保留修改。我希望页面修改在刷新后能保持不变,目前尝试用React的useEffect Hook和localStorage实现此功能。
当前AddRecipe等功能按钮可正常工作,CSS样式未显示,其他处理菜谱的无关模块已省略,核心代码如下:
import React, { useState, useEffect } from 'react'; import RecipeList from './RecipeList'; import '../css/app.css'; import { v4 as uuidv4 } from 'uuid'; export const RecipeContext = React.createContext() const LOCAL_STORAGE_KEY = 'cookingWithReact.recipes'; function App() { const [recipes, setRecipes] = useState(sampleRecipes) useEffect(() => { const recipeJSON = localStorage.getItem(LOCAL_STORAGE_KEY); if (recipeJSON !== null) { setRecipes(JSON.parse(recipeJSON)) } }, []) useEffect(() => { localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(recipes)) }, [recipes]) const recipeContextValue = { handleRecipeAdd, handleRecipeDelete } function handleRecipeAdd() { const newRecipe = { id: uuidv4(), name: 'New', servings: 1, cookTime: '1:00', instructions: 'Instructions', ingredients: [ {id: uuidv4(), name: 'Name', amount: '1 Tbs'} ] } setRecipes([...recipes, newRecipe]) } function handleRecipeDelete(id) { setRecipes(recipes.filter(recipe => recipe.id !== id)) } return ( <RecipeContext.Provider value={recipeContextValue}> <RecipeList recipes={recipes} /> </RecipeContext.Provider> ) } const sampleRecipes = [ { id: 1, name: 'Plain Chicken', servings: 3, cookTime: '1:45', instructions: "1. Put salt on chicken.\n2. Put chicken in oven.\n3. Eat the chicken.", ingredients : [ { id: 1, name: 'Chicken', amount: '2 pounds' }, { id: 2, name: 'Salt', amount: '1 Tbs' } ] }, { id: 2, name: 'Plain Pork', servings: 5, cookTime: '0:45', instructions: "1. Put paprika on pork.\n2. Put pork in oven.\n3. Eat the pork.", ingredients : [ { id: 1, name: 'Pork', amount: '3 pounds' }, { id: 2, name: 'Paprika', amount: '2 Tbs' } ] } ] export default App;
界面截图
- 默认界面:

- 删除默认菜谱并添加新菜谱后的界面:

- 页面刷新后的界面:

欢迎提供任何建议,感谢支持。
内容的提问来源于stack exchange,提问作者Rhodey
相关产品推荐
相关产品推荐

