Есть ли способ сохранить значения, отличные от строк, с помощью AsyncStorage? Я хочу, например, хранить простые логические значения.
AsyncStorage.setItem('key', 'ok');
Нет проблем, но:
AsyncStorage.setItem('key', false);
Не работает.
Есть ли способ сохранить значения, отличные от строк, с помощью AsyncStorage? Я хочу, например, хранить простые логические значения.
AsyncStorage.setItem('key', 'ok');
Нет проблем, но:
AsyncStorage.setItem('key', false);
Не работает.
Основываясь на AsyncStorage React-native docs, я боюсь, что вы можете хранить только строки.
static setItem(key: string, value: string, callback?: ?(error: ?Error)
> => void)
Устанавливает значение для клавиши и вызывает обратный вызов при завершении, а также Ошибка, если она есть. Возвращает объект Promise.
Возможно, вы захотите попробовать и посмотреть сторонние пакеты. Возможно этот.
Редактировать 02/11/2016
Спасибо @Stinodes за трюк.
Хотя вы можете хранить только строки, вы также можете укрепить объекты и массивы с помощью 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");
Чтобы получить значение из ключевого "имя"
AsyncStorage.getItem("name").then((value) => {
console.log("Get Value >> ", value);
}).done();
Выход будет следующим:
'Get Values >> ', 'Hello'