Сохранить несколько объектов в локальном хранилище? 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}));
};
Другие вопросы по тегам