在setState

时间:2018-07-21 19:17:36

标签: javascript react-native expo

我正在编写一个用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到故障行)引起。

谢谢:)

0 个答案:

没有答案