Подтвердить что ты не робот

React Native AsyncStorage сохраняет значения, отличные от строк

Есть ли способ сохранить значения, отличные от строк, с помощью AsyncStorage? Я хочу, например, хранить простые логические значения.

AsyncStorage.setItem('key', 'ok');

Нет проблем, но:

AsyncStorage.setItem('key', false);

Не работает.

4b9b3361

Ответ 1

Основываясь на 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
})

Ответ 2

Вы можете хранить строки только, но вы можете полностью скомпоновать объекты и массивы с помощью 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

После получения и разбора значения (которое не обязательно должно быть логическим, оно может быть объектом. В зависимости от ваших потребностей) вы можете перейти в состояние или сделать что-нибудь с ним.

Ответ 3

Я установил значение в "name" в AsyncStorage

AsyncStorage.setItem("name", "Hello");

Чтобы получить значение из ключевого "имя"

AsyncStorage.getItem("name").then((value) => {
   console.log("Get Value >> ", value);
}).done();

Выход будет следующим:

'Get Values >> ', 'Hello'