如何在本机反应中使用 AsyncStorage 存储对象数组

时间:2021-01-20 09:20:36

标签: arrays react-native storage

我正在尝试存储一个对象数组,其中每个对象都有一个字符串标签和相应的数组类型数据,例如:

arrayOfCategory=[
 {label: "A", data: Array(36)}
 {label: "B", data: Array(20)}
 {label: "C", data: Array(20)}
 .....
];

ScreenShoot of the array:

ScreenShoot of the inner array:

当我尝试像这样存储它时:

AsyncStorage.setItem("arrayOfCategoryStroage", JSON.stringify(arrayOfCategory));

如果我从存储中获取项目,我有一个空数组。

   AsyncStorage.getItem('arrayOfCategoryStroage').then((value) => {
       console.log(JSON.parse(value))
    });

2 个答案:

答案 0 :(得分:0)

可能存在问题,您获取物品的方式,并确保您的 Aysnc 存储没有在某处被清除,在这种情况下,所有数据都将丢失。

您可以通过设置项目

 AsyncStorage.getItem('arrayOfCategoryStroage',JSON.stringify(data))

然后像这样获取它并检查是否有任何错误。

 AsyncStorage.getItem('arrayOfCategoryStroage', (err, result) => {
            if (result) {
             const data= JSON.Parse(result);
            }
        }).catch(() => {
        });

答案 1 :(得分:0)

我尝试单独存储每个项目标签,例如:

AsyncStorage.setItem(item.label, JSON.stringify(data));

然后我得到它们中的每一个并推入数组:

data1.forEach((item, i) => {
  AsyncStorage.getItem(item.label).then((value) => {
     if(value!=null)
     {
      arrayOfAll.push({label:item.label,data:JSON.parse(value)})
    
     }
})
});

其中 data1 是一个标签数组:

const data1=[ {label: "Homepage"},
{label: "Politik"},
{label: "Lokal"},
]

我认为问题来自内部数组的大尺寸。

我用小数组试了一下,效果很好:

   const someArray=[
     {label: "A", data: [{id:"1", title:"title1"},{id:"2", title:"title2"}]},
     {label: "B", data: [{id:"1", title:"title1"},{id:"2", title:"title2"}]},
     {label: "C", data: [{id:"1", title:"title1"},{id:"2", title:"title2"}]},
    ];