如何在 React Native 中使用异步存储存储唯一数据?

Posted

技术标签:

【中文标题】如何在 React Native 中使用异步存储存储唯一数据?【英文标题】:How can I store unique data with asyncstorage in React Native? 【发布时间】:2021-12-13 23:19:12 【问题描述】:

在 React Native 中,我希望每次在文本框中键入时都使用唯一 id 存储对象数组数据。我正在使用异步存储,但不知道如何处理。

【问题讨论】:

【参考方案1】:

你可以实现这样的东西

第一次运行

npm i @react-native-async-storage/async-storage

然后创建一个 AsyncStore.js 或类似文件:

import AsyncStorage from '@react-native-async-storage/async-storage';

export const storeObject = async (object) => 
  const id = await createId()
  const identified = ...object, id 
  const jsonValue = JSON.stringify(identified);
  await AsyncStorage.setItem('@object-' + id, jsonValue);
;

export const getObject = async (id) => 
  const storedObject = await AsyncStorage.getItem('@object-' + id);
  if (storedObject)
    return JSON.parse(storedObject );
  
;

export const storeIds = async (ids) => 
  const jsonValue = JSON.stringify(ids);
  await AsyncStorage.setItem('@object-ids', jsonValue);
;
export const getIds = async (id, ids) => 
  const storedIds = await AsyncStorage.getItem('@object-ids');
  if (storedIds) 
    return JSON.parse(storedIds );
  
;

const createId = async() => 
  const ids = await getIds();
  const id = Math.max(ids) + 1
  await storeIds([...ids,id])
  return id;

编辑:我添加了一些未经测试的唯一标识符代码

【讨论】:

从哪里生成唯一ID?每次我从文本输入框中获取输入时,我只是传递一个状态变量,然后增加变量的值。这暂时有效,但是当我关闭应用程序并再次获取文本时,变量会再次从头开始,用该 ID 覆盖先前的值。 我认为这是您处理逻辑的缺陷,而不是存储。听起来你应该自己生成 id ,例如1. 从存储中获取所有内容 2. 创建新项目,并添加一个 id = max(storedObjects.id)+1 的新项目 3. 存储新项目

以上是关于如何在 React Native 中使用异步存储存储唯一数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 React Native Agora 异步错误

react-native 异步存储不保存,也没有错误

我可以使用 React Native 的异步存储从本地存储中获取值吗?

将原生 iOS 应用的数据迁移到 React Native 应用的异步存储

React Native:如何从循环中获取值到钩子 useState

React Native - 为异步存储值更改添加监听器