【问题标题】:react-native array.map with asyncstorage.getItemreact-native array.map 与 asyncstorage.getItem
【发布时间】:2017-12-23 22:44:14
【问题描述】:

我一直在尝试使用 react native 从异步存储中检索数据。

这是我到目前为止所做的:

import React, { Component } from 'react';

import {
  Text,
} from 'react-native';

class GetData extends Component {
  constructor() {
    super()
    this.state = {
      dataLocalIds: [
        "data1Data",
        "data2Data",
        "data3Data",
        "data4Data",
        "data5Data",
        "data6Data"
      ],
    }

    this.state.dataLocalIds.map((value, index) => {
      this.data = this.getDatas(value, index);
    })
  }

  async getDatas(value, index) {
    try {
      const value = await AsyncStorage.getItem(value).then(val => {
        return JSON.parse(val)
      });
      return value
    } catch (err) {
      throw err
    }
  }

  renderScreen = () => {
      return (
        <Text> Hello World </Text>
      );
  }

  render() {
    return (
      this.renderScreen()
    );
  }
}

export default GetData;

问题是:应用程序因错误而崩溃,“索引 1 处的绑定值为 null”。

Stacktrace 没有指向我的代码中的行。相反,它指向 sqlite 和 asyncstorage。

我真的不知道如何解决这个问题。帮助将不胜感激。

【问题讨论】:

    标签: sqlite react-native asyncstorage


    【解决方案1】:

    嗨,MacFlyer,您尝试过使用 multiget (https://facebook.github.io/react-native/docs/asyncstorage.html#multiget) 吗?

    【讨论】:

    • 我会试试的。谢谢!
    【解决方案2】:

    这可能是由于您的 getData() 方法的参数名称是 value 并且您在 try 块中声明了一个新变量 const 值。

    当值被传递给 AsyncStorage 时,如果发现声明了一个变量(JS 解析和标记化阶段)但它的值为undefined,它会搜索对直接作用域(try 块)的引用。所以 undefined 被传递给 AsyncStorage.getItem 方法。

    尝试重命名其中一个。

    【讨论】:

      【解决方案3】:

      尝试类似:

      constructor(){
          super();
      
          this.state={...}
          this.getDataFromAsyncStorage()
      }
      async getDataFromAsyncStorage() {
          let dataArray = [];
          for (let value of this.state.localIds){
              let data = await AsyncStorage.getItem(value);
              dataArray.push(data)
          }
          this.data = dataArray;
      }
      

      【讨论】:

      • 另外,添加了检查 AsyncStorage 是否发现数据是否丢失,但我相信这个逻辑不会有你当前代码面临的问题,所以我想它只需要一些锐化跨度>
      【解决方案4】:

      1) 我认为构造函数中的this.myFunction = this.myFunction.bind(this) 可以解决。

      你还有一个问题。

      Getdatas 函数是异步的并返回 promise 2)

      const promises = this.state.dataLocalIds.map((value, index) => this.getDatas(value, index));
      const [data1, data2, ] = await Promise.all(promises)
      

      3) 名为value 的变量已在geDatas 范围内声明

      尝试修复并告诉我们

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-28
        • 2019-08-14
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        相关资源
        最近更新 更多