#javascript #android #react-native #mobile #asyncstorage
#javascript #Android #react-native #Мобильный #asyncstorage
Вопрос:
import * as React from 'react';
let paths = new Map();
export function AddPath(path) {
if (paths.has(path)){
return
}
else{
paths.set(path, false);
}
}
export function CompletedPath(path) {
paths.set(path, true);
}
Приведенный выше мой код выглядит как обычно. Он функционирует так, как ожидалось. Я создаю карту с именем paths для хранения некоторых важных данных. Его значения либо истинны, либо ложны, а его ключи являются объектами JSON.
Что мне нужно сделать, это сохранить эту карту в асинхронное хранилище, чтобы ее можно было извлечь, когда я снова открою приложение после его закрытия.
Это моя текущая попытка изменить мой код:
import * as React from 'react';
import AsyncStorage from '@react-native-community/async-storage';
let paths = new Map();
const getData = async () => {
try {
const jsonValue = await AsyncStorage.getItem('Map')
let paths = JSON.parse(jsonValue);
} catch(e) {
// error reading value
}
alert(paths)
}
const storeData = async (data) => {
try {
const jsonValue = JSON.stringify(data)
await AsyncStorage.setItem('Map', jsonValue)
} catch (e) {
// saving error
}
}
getData();
export function AddPath(path) {
if (paths.has(path)){
return
}
else{
paths.set(path, false);
storeData(paths);
}
}
export function CompletedPath(path) {
paths.set(path, true);
storeData(paths);
}
Я создаю карту путей как обычно, а затем вызываю getData(), чтобы проверить, существует ли карта уже в asyncstorage. Затем, где бы я ни обновлял карту раньше, я также обновлю асинхронное хранилище.
Однако я не могу заставить ее работать. Карта «пути» всегда отображается как пустая, когда я снова открываю приложение.
Может ли быть проблема с тем, как я сохраняю пути к asyncstorage, потому что это карта, а не объект JSON?
Есть идеи?
Ответ №1:
Если вы сделаете это JSON.stringify
с Map
помощью, она будет преобразована в {}.
Конвертируйте MAP
в Array
и используйте stringify
.
const map = new Map();
map.set('test',true);
console.log(JSON.stringify(map));
console.log(JSON.stringify(Array.from(map.entries())));
Stringify
const jsonValue = JSON.stringify(Array.from(data.entries()));
Разбор
let paths = new Map(JSON.parse(jsonValue));