“未定义的不是函数”可能是一个普遍提出的问题。但是我找不到解决这里确切问题的方法。
我的代码如下:
如何在出现问题的地方调用函数
...
service.queryListToInfoList(response.data || []);
...
在使用中,
export const queryListToInfoList = queryList => queryList.map(ql => queryToInfo(ql));
export const queryToInfo = query => { //some process; return {..}};
package.json
"dependencies": {
...
"react": "16.5.1",
"react-native": "^0.57.1"
...
},
"devDependencies": {
...
"@babel/core": "^7.1.0",
"@babel/plugin-external-helpers": "^7.0.0",
"babel-core": "^7.0.0-0",
"babel-preset-env": "^1.7.0",
"metro-react-native-babel-preset": "^0.45.0"
...
}
.babelrc
{
"presets": ["module:metro-react-native-babel-preset"]
}
最后,我从一些不同的设备上获得了一些错误日志:
“未定义不是函数(正在评估't.map(function(t){return u(t)})')”),表示“ queryListToInfoList”函数。但总的来说,它是可行的。
queryList
始终是一个数组。 (response.data)
这可能是导致问题的原因?
预先感谢
更新:
深入研究,我发现所有这些错误日志都有一些共同之处。 Android意图(例如POWER_DISCONNECTED,RINGER_MODE_CHANGED,CONFIGURATION_CHANGED)之后发生此当机。
答案 0 :(得分:0)
这听起来很傻,您是否尝试将queryListToInfoList导入为
import {queryListToInfoList} from './path_to service'
或import queryListToInfoList from './path_to service'
。我已经看到这些错误通常是在错误输入的情况下发生的
答案 1 :(得分:0)
一段时间后,我发现了问题。发生这种情况是因为有时apisauce / axios无法正确解析response.data。因此,它不是对象而是传递字符串,其余的在引用string.map()时会引发错误。
作为一种解决方法,我在设置response.data之前添加了类型检查,所以现在就像在api调用之后一样:
if(response.ok && typeof response.data === 'object'){
dispatch(setData(response.data || []));
}
请注意,仅当预期数据实际上是对象类型时,这才可以。