首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >localStorage + createContext

localStorage + createContext
EN

Stack Overflow用户
提问于 2021-03-20 10:15:33
回答 1查看 87关注 0票数 0

我有这样的背景:

代码语言:javascript
复制
import React, { createContext, useState } from "react";

export const VehicleContext = createContext();

function VehicleContextProvider(props) {
  //Set vehicles array holding drivers objects
  const [photo] = useState(null)
  const [vehicles, setVehicles] = useState([
    {
      id: Math.floor(Math.random() * 100),
      brand: "Honda",
      model: "Accord",
      prodYear: 2012,
      bodyType: "Sedan",
      registrationNum: "XYZ 98791",
      tankCapacity: 60,
      fuelConsumption: 8,
      fuelType: "Petrol",
      photo:
        photo ||
        "https://firebasestorage.googleapis.com/v0/b/carwallet-react.appspot.com/o/photos%2Fhonda.jpg?alt=media&token=dcca1cde-ed10-4004-9ddf-0085e1a9b815",
    },
  ]);

  //Declare function allowing to add vehicles
  const addNewVehicle = (vehicle) => {
    setVehicles([
      ...vehicles,
      {
        id: Math.floor(Math.random() * 100),
        brand: vehicle.brand,
        model: vehicle.model,
        prodYear: vehicle.prodYear,
        bodyType: vehicle.bodyType,
        registrationNum: vehicle.registrationNum,
        tankCapacity: vehicle.tankCapacity,
        fuelConsumption: vehicle.fuelConsumption,
        fuelType: vehicle.fuelType,
        photo: vehicle.photo,
      },
    ]);
  };

  //Declare function to remove certain vehicle form array
  const removeVehicle = (id) => {
    setVehicles(vehicles.filter((vehicle) => vehicle.id !== id));
  };

  return (
    <VehicleContext.Provider
      value={{ vehicles, addNewVehicle, removeVehicle }}
    >
      {props.children}
    </VehicleContext.Provider>
  );
}

export default VehicleContextProvider;

在我的表单中,我从用户那里获取数据,以便向车辆数组中添加新的vehicle对象。问题是:可以在提交时将这些项添加到用户的本地存储中吗?如果是的话-怎么做?

我使用的是createContext / useContext,没有useReducer或Redux。我试过useEffect,但没有成功。数据被保存到localStorage,但是在重新加载时,它被设置为上下文中给定的初始值。

EN

回答 1

Stack Overflow用户

发布于 2021-03-20 10:25:05

您可以将vehicles array保存到Submit上的本地存储,就像您在问题中解释的那样。

useState中初始化数据时,从localStorage获取数据。如果发现,从它发送数据,否则使用初始车辆数据。

代码语言:javascript
复制
const [vehicles, setVehicles] = useState(() => {
  const localData = JSON.parse(localStorage.getItem("vehicles"));
  return (
    localData || [
      {
        id: Math.floor(Math.random() * 100),
        brand: "Honda",
        model: "Accord",
        prodYear: 2012,
        bodyType: "Sedan",
        registrationNum: "XYZ 98791",
        tankCapacity: 60,
        fuelConsumption: 8,
        fuelType: "Petrol",
        photo:
          photo ||
          "https://firebasestorage.googleapis.com/v0/b/carwallet-react.appspot.com/o/photos%2Fhonda.jpg?alt=media&token=dcca1cde-ed10-4004-9ddf-0085e1a9b815",
      },
    ]
  );
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66720376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档