【问题标题】:React native android undefined is not a function works in IOSReact native android undefined is not an function works in IOS
【发布时间】:2019-05-04 03:53:32
【问题描述】:

在调试器运行时在 IOS 和 Android 中工作,但不能通过 Android 模拟器工作。我通过react-native log-android 收到此消息,基本上我没有返回任何内容:

12-02 10:39:58.511 22502 24204 W ReactNativeJS: TypeError: undefined is not a function (near '...}).flat()

Android Picture

IOS Picture

这是我正在使用的 fetch 函数:

import axios from 'axios';

export const getData = async url => {
  try {
    const response = await axios.get(url);
    const data = response.data;
    return data;
  } catch (error) {
    console.log(error);
  }
};

export default getData;

在我的 componentDidMount 内部,我使用上面的 GetData 函数调用端点:

componentDidMount() {
    const teamsAPI = 'https://statsapi.web.nhl.com/api/v1/teams';

    getData(teamsAPI).then(teams => {
      const teamData = teams.teams
        .map(({ id, name }) => ({
          teamId: id,
          teamName: name
        }))
        .flat()

      this.setState({
        teams: teamData
      });
    });
  }

此后所有内容都已移至 REDUX,但我今天回顾了我的一个分支,上面共享了更基本的代码,并且当时也遇到了此代码的问题。不幸的是,直到现在还没有意识到代码编译的所有差异。了解该问题可能是由于 2 个编译器造成的,但不知道如何解决该问题/为什么其中一个会出现类型错误而不是另一个。

我认为由于这里提到的原因,它可以与调试器一起使用:

React Native behavior different in simulator / on device / with or without Chrome debugging

编辑:想提一下我已经完成了缓存重置并删除了构建文件夹并重新构建了

【问题讨论】:

  • 看起来你的 getData 函数在遇到错误时不会返回任何内容。

标签: android reactjs react-native react-native-android undefined-function


【解决方案1】:

我试用了您的代码,并且在 Android 和 iOS 中都遇到了拒绝承诺。这是由 .flat() 删除它导致的,这会阻止 Promise 拒绝发生。

查看您在此处映射的数据似乎不需要展平数据,因为它作为对象数组返回,其中没有其他数组。

删除.flat() 是否适合您?

您可以在此处查看有关 .flat() 的更多信息以及它如何仍处于实验阶段 array.prototype.flat is undefined in nodejs

我还会考虑在您的 getData 函数出错时返回一些内容,或者可能使用 promise 来处理错误。

【讨论】:

  • .flat() 是问题所在。阅读文档看起来它可以与调试器一起使用,因为它正在运行 chrome。至于获取数据功能,这是我在调度操作失败时添加的稍微旧的代码。
  • 很高兴它现在已为您排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多