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



Существует ли какой-либо способ хранения значений, отличных от строк с помощью AsyncStorage? Например, я хочу хранить простые логические значения.



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


- это не проблема, но:



AsyncStorage.setItem('key', false);


Не работает..

757   3  

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

    Ничего не найдено.