React Native Android语法错误:试图重新定义属性'key'。

5

在模拟器上(测试了Genymotion和Google原生模拟器)以及在物理设备(三星S4)上运行react-native run-android后,我收到以下错误:

enter image description here

错误信息如下: java.util.concurrent.ExcecutionException: java.lang.RuntimeException: SyntaxError: Attempted to redefine property 'key'. (http://192.168.50.37:8081/index.android.bundle?platform=android&dev=true&hot=false:72450)
  • 这篇stackoverflow讨论中,发生了类似的错误(也是一个java.util.concurrent.ExecutionException),但那里的解决方案对我没有帮助,即adb reverse tcp:8081 tcp:8081
  • 我还尝试将Dev设置/Debug server host & port for device更改为0.0.0.0:8081而不是MY_IP:8081,其中MY_IP是我的PC的IP地址。

我正在运行react native 0.22.2

3个回答

17
问题是:在某个视图中,key 被定义了两次,例如:
<View key={index} key={other} ... />

所以只需删除一个 key 属性。

解决方案的中间步骤:

首先,在React Native菜单中按下“启动Chrome调试”时,应用程序将再次运行,但错误将显示在相应浏览器选项卡的控制台中。 然后它会显示更好的错误消息。

奇怪的是,这个错误在iOS上不会发生。


你用了什么方法来找到重复的键?我认为在第三方库中有一个重复的键,但我不知道如何确定是哪一个。搜索一百个node_modules并不好玩。有什么想法吗? - Ed of the Mountain
不太确定了,我想我只是回顾了之前与错误相关的组件并搜索了“key”。然而,在< />中至少查找两次“key”的正则表达式可能会在这种情况下有所帮助!当然,你的错误也可能有其他原因。 - Andru
肯定有某种类似于“lint工具”的东西可以捕捉到这样的问题吧? 我猜Android有点像React Native Lint。但它无法识别问题的位置。这次我在JSX组件定义中找到了重新定义的属性。我也在样式表样式定义中遇到过这种情况。我想念真正的编译器。 - Ed of the Mountain
1
你可以在node_modules目录中使用以下正则表达式与ack配合使用: ack '^.*(key\s*=){1}.*(key\s*=){1}.*$' - ferndopolis
如果您有重复的样式键值对,这也可能会发生。 - Tim Christensen
对我来说,在构造函数中,我在状态数组中声明了一个变量两次。不幸的是,这个错误没有在 iOS 上导致崩溃,只有在 Android 上出现了问题。 - CanCoder

2

我曾经遇到过同样的错误,但是关键字不同。

在我的情况下,这个关键字在我的 CSS 样式属性中被声明了两次。

let styles = StyleSheet.create({
    keyword:{}, 
    keyword:{}
});

在iOS上没有崩溃或警告,但会导致Android崩溃。


1
遇到了v0.49版本上相同的错误。花了很多时间最终发现我的CSS声明中存在重复项:
logo: {
    flex:.3,
    height: 120, 
    marginBottom: 10,
},

logo: {
    ...styText,
    marginTop: 10
},

刚刚删除了第二个声明,修复了错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接