在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()
安卓图片
IOS图片
这是我正在使用的提取功能:
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;
在我的组件DidMount内部,我使用上面的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,但我今天回顾了我的一个分支,上面分享了更基本的代码,当时这个代码也有问题。不幸的是,到目前为止还没有意识到代码编译的所有差异。要知道这个问题可能是由两个编译器引起的,但不知道如何处理这个问题/为什么其中一个编译器会出现类型错误,而另一个编译器不会。
它可以与调试器一起工作,我认为这是由于这里提到的:
React模拟器/设备上/有或没有Chrome调试时的本地行为不同
编辑:想说的是,我已经做了缓存重置,删除了构建文件夹并重建了
我试用了你的代码,在Android和iOS中都出现了拒绝承诺的情况。它是由.flat()
删除引起的,它阻止了承诺拒绝的发生。
看看你在那里映射的数据,似乎没有必要将数据压平,因为它是一个对象数组,里面没有其他数组
移除.flat()
对您来说可能是一个解决方案吗?
你可以在这里看到关于.flat()
的更多信息,以及它如何仍然是实验性的数组。prototype.flat在nodejs 中未定义
当getData
函数出现错误时,我也会考虑从它返回一些东西,或者可能使用promise来处理错误。