-1

我有 2 个房间{roomId: room1, roomId: room2},我想在 localStorage 上为每个房间保存对象。

对象看起来像

let notifiedRoom = {
    roomId: roomId,
    dismissed: true
}; 

当用户关闭相应房间的通知时, notifyRoom 对象将保存在 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 通知,则 room1 的先前 localStorage 对象将被 room2 覆盖。

如果 roomId 匹配,我只需要它覆盖。否则只需为 locatStorage 上的每个不同 roomId 创建新对象。

非常感谢

4

3 回答 3

1

而不是这样做,{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

于 2020-08-26T11:26:32.560 回答
0

您需要在一个对象内具有唯一键,以便:

{room1: {dismissed: true}, room2: {dismissed: true}}

const setLocalStorage = (roomId) => {
 const notifiedRoom = JSON.parse(localStorage.getItem('notifiedRoom'))
 notifiedRoom[roomId] = {dismissed: true}
 localStorage.setItem('notifiedRoom', JSON.stringify({...notifiedRoom}));
};
于 2020-08-26T11:36:23.387 回答
0

很简单,您只需为新的本地存储命名并将数组设置为它

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'));

希望这是你要找的

于 2020-08-26T11:26:10.000 回答