在 AsyncStorage React Native 上保存对象数组

干得好阿姆鲁拉·菲克里

我正在尝试保存和读取本地存储中的对象数组数据。保存过程已经完成,下面是我的对象结构,以提供更多信息:

在此处输入图片说明

有两种类型的类别:收入和结果,因此我在保存条目时使用这些类别作为我的密钥,完整代码如下所示:

const onSubmit = async () => {
    const newData = {
      category: type,
      title: title,
      note: note,
      amount: amount,
      date: date,
    };
    try {
      const jsonData = JSON.stringify(newData);
      let existingTransactions = await getTransaction(newData.category);
      const updatedTransactions = [...existingTransactions, jsonData];
      await AsyncStorage.setItem(
        newData.category,
        JSON.stringify(updatedTransactions)
      );
    } catch (err) {
      console.log(err);
    }
  };

  const getTransaction = async (category) => {
    let transactions = await AsyncStorage.getItem(category);
    if (transactions) {
      return JSON.parse(transactions);
    } else {
      return [];
    }
  };

基本上在保存新对象之前,我需要读取以前保存的数组,然后将新对象推送到现有数组中,最后使用 setItem 将它们全部保存。下面是每当我保存它在控制台上打印的新对象时的对象数组:

在此处输入图片说明

我的问题是:

1. 我用 KEY 做正确的事吗?或者我应该让每个对象的密钥都是唯一的?

2. 每当我尝试使用 getItem 读取这些数组然后映射数组时,我无法获得我想要的数据,我只能获得如下所示的完整对象:

在此处输入图片说明

但我不能只说每个对象的类别或标题。

这是我用来读取数组的代码:

const [data, setData] = useState([]);
  useEffect(() => {
    async function fetchData() {
      const value = await AsyncStorage.getItem(category);
      const arrayData = JSON.parse(value);
      console.log(arrayData);
      setData(arrayData);
    }
    fetchData();
  }, []);
  
 {data.map((entry, index) => {
   return <Text key={index}>{entry}</Text>;
 })}

瑜伽士

我熟悉 React.js,而不是 React Native。但是,根据我的阅读,您使用JSON.stringify过早犯了错误

// const onSubmit = async () => {
// ...
    try {
      const jsonData = JSON.stringify(newData); // convert object to string
      let existingTransactions = await getTransaction(newData.category);
      const updatedTransactions = [...existingTransactions, jsonData]; // you're having array of string, not array of object
      await AsyncStorage.setItem(
        newData.category,
        JSON.stringify(updatedTransactions)
      );
    } 
// ...

先去掉JSON.stringify,然后像这样稍微改一下代码

// const onSubmit = async () => {
// ...
    try {
      let existingTransactions = await getTransaction(newData.category);
      const updatedTransactions = [...existingTransactions, newData]; // notice the newData here
      await AsyncStorage.setItem(
        newData.category,
        JSON.stringify(updatedTransactions)
      );
    } 
// ...

请先清除存储,然后您可以重试。德米基安拉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React Native AsyncStorage保存多个项目

AsyncStorage:React Native

AsyncStorage - 错误(React Native)

React Native-使用AsyncStorage更新数组中的项目

API提取React Native后AsyncStorage存储空数组

从AsyncStorage清除项目-React Native

React Native 中的 AsyncStorage 问题

React Native:通过 AsyncStorage 保存图像 URI 并在不同的 React 导航屏幕中重新加载

React Native - AsyncStorage,等待和同步

React Native 嵌套 AsyncStorage 调用未呈现

React Native:用Java在AsyncStorage中编写

AsyncStorage.getItem返回undefined:React Native

React Native中的AsyncStorage有多大?

React Native AsyncStorage异步函数返回

React Native AsyncStorage在渲染后获取数据

React Native 中的 AsyncStorage 单例

React Native AsyncStorage返回承诺而不是价值

在React Native中从AsyncStorage设置TextInput值

如何向React Native AsyncStorage添加项目

React Native AsyncStorage不覆盖数据

React-native 中 AsyncStorage 有问题

React Native:基于AsyncStorage结果的条件render()

React-Native 从 AsyncStorage 返回视图

列表渲染 React Native 之前的 AsyncStorage

为什么在React Native中存储对象数组时AsyncStorage会给出一个空数组

将MobX存储保存并加载到React Native AsyncStorage的最佳模式?

React-Native AsyncStorage使用iPhone Simulator在哪里将数据保存在磁盘上?

为 AsyncStorage 返回的 JSON 对象中的每个项目 React Native 在屏幕上创建一个组件

React-Native AsyncStorage:我检索了一个数组,但随后它仅成为该数组的一个对象