我有这样的背景:
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,但是在重新加载时,它被设置为上下文中给定的初始值。
发布于 2021-03-20 10:25:05
您可以将vehicles array保存到Submit上的本地存储,就像您在问题中解释的那样。
在useState中初始化数据时,从localStorage获取数据。如果发现,从它发送数据,否则使用初始车辆数据。
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",
},
]
);
});https://stackoverflow.com/questions/66720376
复制相似问题