Сохранить несколько объектов в локальном хранилище? Javascript
У меня 2 комнаты {roomId: room1, roomId: room2}
и я хочу сохранить объект для каждой комнаты в localStorage.
Объект выглядит как
let notifiedRoom = {
roomId: roomId,
dismissed: true
};
Объект notificationRoom сохраняется в localStorage, когда пользователь закрывает уведомление для соответствующей комнаты.
import React from 'react';
import { toast } from 'react-toastify';
const RoomNotification = (props) => {
const { roomId, message } = props;
const setLocalStorage = (roomId) => {
let notifiedRoom = {
roomId: roomId,
dismissed: true
};
localStorage.setItem('notifiedRoom', JSON.stringify(notifiedRoom));
};
const notify = () => {
toast(<div><p>{roomId}</p><p>{message}</p></div>,
{
toastId: roomId,
position: "top-center",
draggable: true,
onClose:() => setLocalStorage(roomId)
});
};
}
у меня проблема в том, что это будет сохранять объект только для комнаты за раз. Итак, если вы закроете уведомление room1, тогда в localStorage естьroomId: room01, dismissed: true
, если я закрою уведомление room2, то предыдущий объект localStorage для room1 будет перезаписан room2.
Мне нужно только перезаписать, если roomId совпадает. В противном случае просто создайте новый объект для каждого другого roomId в locatStorage.
Большое спасибо
3 ответа
Вместо этого {roomId: room1, roomId: room2}
вы можете просто сделать это:
{room1: room1Data, room2: room2Data}
Поэтому, если вы хотите обновить какой-либо, например room1.
const setLocalStorage = (roomId) => {
const initialUpdateData = JSON.parse(localStorage.getItem('notifiedRoom')) ||{room1:null,room2:null}
let updatedRoom = {
...initialUpdateData,
[updatedRoom]:{
roomId: roomId,
dismissed: true
}
};
localStorage.setItem('notifiedRoom', JSON.stringify(updatedRoom));
};
Примечание: updatedRoom
будет ваша комната1 или комната2
Это легко, вы можете просто дать имя новому локальному хранилищу и установить для него массив
localStorage.setItem('1', JSON.stringify(new_array));
localStorage.setItem('2', JSON.stringify(new_array));
Как и мудрый - так он создаст новое хранилище для каждой уведомленной комнаты
И снова, когда вам нужно получить хранилище - можно получить по его имени
var room1= JSON.parse(localStorage.getItem('1'));
var room2= JSON.parse(localStorage.getItem('2'));
Надеюсь, это то, что ты ищешь
У вас должен быть уникальный ключ внутри одного объекта, поэтому:
{room1: {discissed: true}, room2: {disissed: true}}
const setLocalStorage = (roomId) => {
const notifiedRoom = JSON.parse(localStorage.getItem('notifiedRoom'))
notifiedRoom[roomId] = {dismissed: true}
localStorage.setItem('notifiedRoom', JSON.stringify({...notifiedRoom}));
};