使用console.log记录反应本机事件不会触发,最终导致应用崩溃

时间:2018-11-15 20:28:42

标签: javascript react-native event-handling expo

在react-native中将事件添加到ScrollView时,我注意到事件处理程序未触发,并且该应用最终将在几秒钟后无提示地崩溃。

这是我的处理程序的样子,我所做的只是一个简单的console.log事件记录:

// Does not work:
<FlatList
  ...
  onScrollEndDrag={e => {
    console.log(e);
  }}
  ...
/>

我注意到,如果不传递参数,事件处理程序将起作用:

// Works:
<FlatList
  ...
  onScrollEndDrag={e => {
    console.log('event');
  }}
  ...
/>

但是我无法访问事件数据。

当我尝试在此处使用console.log访问事件时,为什么事件处理程序失败?

1 个答案:

答案 0 :(得分:1)

我发现了一个explanation on github

  

问题可能是事件对象具有循环的或不可序列化的字段。尝试记录event.nativeEvent(这是ViewLayout对象)。

这是由于expo(XDE)通过使用pretty-format对数据进行序列化来实现console.logging以便将数据从设备发送到计算机的原因。

从31版开始,这确实是expo中的一个bug。已在master中修复,但是如果有帮助,我将在此处保留此答案。

解决方案是在e.nativeEvent行中使用e而不是console.log,因为nativeEvent没有循环引用。