我正在使用React Native v.43.0-rc.3,当我点击我的切换按钮时,我的Android模拟器中出现此错误:
undefined is not an object (evaluating 'action.type')
我的切换按钮已连接到/action/index.js
:
export const toggleUpdateSwitch = (showUpdates) => {
// error goes away when i remove this line below ----+v
AnalyticsTracker.trackEvent({"category": "profile", "action" : "toggle", "label": "section/updates"})
async dispatch => {
ToastAndroid.show(TOGGLE_UPDATES_NO_DATA_MESSAGE, ToastAndroid.LONG, ToastAndroid.CENTER);
const response = await fetch('http://my.url.com/doSomething', { headers, method: 'GET' });
}
}
所以我添加了上面的行(AnalyticsTracker),这就是我切换时导致错误的原因。有什么想法吗?
模拟器错误截图:
答案 0 :(得分:1)
之前我遇到过这样的问题。您必须将跟踪器代码放在异步调度中。根据我的经验,每当我在函数中进行异步调度时,如果我在其外部有同步代码,我总是会收到此错误。我不清楚为什么会发生这种情况,但我知道这对我来说已经解决了。
我的理论是,当你进行异步时,你会开始一个不同的线程。通过在其外部使用同步代码,主线程上发生了一些事情,但它没有返回任何内容。因此,当你执行action.type时,你得到undefined不是一个对象,因为默认情况下我认为RN期望一个具有type属性的对象被返回,但是你没有返回任何东西。