我正在编写一个用create-react-native-app
引导的带有Expo的React Native。
我还在应用程序中使用redux和react-navigation。在导航方面,它的根bottomTabNavigator
带有3个标签,每个标签均为StackNavigator
。
在我的一个屏幕中,我的状态有一个对象属性,我只想更新其中的一部分,所以我使用了像这样的散布运算符:
this.setState(prevState => {
player: {
...prevState.player,
name: newName
}
});
但是这样做时,出现以下错误:
TypeError:分配的来源之一在原型链上有一个可枚举的密钥。您是否要分配原型属性?我们不允许这样做,因为这是我们不支持的极端情况。该错误是性能优化,不符合规范。
我将其范围缩小为在状态更新中使用prevState
,因为它在执行操作时也会崩溃:
updatePlayerName = (event) => {
const name = event.nativeEvent.text;
if (!name) {
return;
}
this.setState(prevState => {
console.log(prevState);
return {
player: {
name: "toto"
}
}
});
}
我还注意到它以一种奇怪的方式崩溃了我的应用程序:如果您运行该应用程序,您将进入“玩家”屏幕,在这里您可以点击“ ajouter un joueur”来添加一个新玩家。您可以在此处在文本字段中输入名称,然后点击键盘上的Enter以提交。几秒钟后,大多数用户界面将无响应,然后Expo完全退出。
有关完整的代码,您可以找到我的项目here。问题从src/components/PlayerDetailsScreen/PlayerDetailsScreen.js
文件(这里是direct link到故障行)引起。
谢谢:)