React Native AsyncStorage хранение значений, отличных от строк
Существует ли какой-либо способ хранения значений, отличных от строк с помощью AsyncStorage? Например, я хочу хранить простые логические значения.
AsyncStorage.setItem('key', 'ok');
- это не проблема, но:
AsyncStorage.setItem('key', false);
Не работает..
3 ответов:
Основываясь наAsyncstorage React-native docs , я боюсь, что вы можете хранить только строки..
static setItem(key: string, value: string, callback?: ?(error: ?Error) > => void)Задает значение для ключа и вызывает обратный вызов по завершении, наряду с Ошибка, если она есть. Возвращает объект Promise.
Возможно, вы захотите попробовать и взглянуть на сторонние пакеты. Может быть, Этот .
Edit 02/11/2016
Спасибо @Stinodes за трюк.
Хотя вы можете хранить только строки, вы также можете stringify объекты и массивы с JSON для их хранения, а затем проанализировать их снова после извлечения их.
Это будет правильно работать только с простыми экземплярами объектов или массивами, хотя объекты, наследуемые от любых прототипов, могут вызвать неожиданные проблемы.
Пример:
// Saves to storage as a JSON-string AsyncStorage.setItem('key', JSON.stringify(false)) // Retrieves from storage as boolean AsyncStorage.getItem('key', (value) => { JSON.parse(value) // boolean false })
Вы можете хранить только строки, но вы можете полностью стрингировать объекты и массивы с помощью JSON и снова анализировать их при извлечении из локального хранилища.
Однако это будет правильно работать только с простымиObject-экземплярами или массивами.Объекты, наследуемые от любого прототипа, могут вызвать некоторое неожиданное поведение, так как прототипы не будут проанализированы в JSON.
Булевы (или любой примитив, если на то пошло) могут быть сохранены с помощью
JSON.stringify, хотя.
JSON распознает эти типы и может проанализируйте их в обоих направлениях.JSON.stringify(false) // "false" JSON.parse("false") // falseИтак:
// Saves to storage as a JSON-string AsyncStorage.setItem('someBoolean', JSON.stringify(false)) // Retrieves from storage as boolean AsyncStorage.getItem('someBoolean', function (err, value) { JSON.parse(value) // boolean false } // Or if you prefer using Promises AsyncStorage.getItem('someBoolean') .then( function (value) { JSON.parse(value) // boolean false }) // Or if you prefer using the await syntax JSON.parse(await AsyncStorage.getItem('someBoolean')) // boolean falseПосле получения и разбора значения (которое не обязательно должно быть логическим, оно может быть объектом. В зависимости от того, что удовлетворяет ваши потребности), вы можете установить в состоянии или делать с ним все, что угодно.
Я установил значение в ключе" name " В AsyncStorage
AsyncStorage.setItem("name", "Hello");Чтобы получить значение из ключа "name"
AsyncStorage.getItem("name").then((value) => { console.log("Get Value >> ", value); }).done();Вывод будет следующим:
'Get Values >> ', 'Hello'
Comments