React-Native =不变违规:超出最大更新深度

时间:2018-05-21 09:16:02

标签: react-native

我有这个错误,我之前没有这个错误: here is the image of the error 不变违规:超出最大更新深度。当组件在componentWillUpdate或componentDidUpdate中重复调用setState时,可能会发生这种情况。 React限制嵌套更新的数量以防止无限循环。

此错误位于: 在Connect(在LoginForm.js:75)

render() {
const { inputStyle, containerStylePass, containerStyleIdent, barStyle, textInputStyle } = styles;

return (
   <View>
    <View>{/* all the password form*/}
      <View style={containerStylePass}>
      icon
        <Text style={inputStyle}>Mot de passe</Text>
      </View>
      <TextInput
        secureTextEntry
        autoCorrect={false}
        style={textInputStyle}
      />
      <View style={barStyle} />
    </View>

    <View>
      <Connect />
    </View>
  </View>

我不知道为什么会出错,有人可以帮忙吗?

这是我的代码:

import React, { Component } from 'react';
import { Text, TouchableOpacity } from 'react-native';
import LinearGradient from 'react-native-linear-gradient';

class Connect extends Component {

  render() {
    return (
      <TouchableOpacity onPress={this.setState({ butPressed: true })}>
        <LinearGradient
          colors={['#56EDFF', '#42F4A0']}
          start={{ x: 0.0, y: 1.0 }} end={{ x: 1.0, y: 1.0 }}
        >
          <Text style={textStyle}>
            Se connecter
          </Text>;
        </LinearGradient>
      </TouchableOpacity>
    );
  }
}

3 个答案:

答案 0 :(得分:7)

尝试:

<TouchableOpacity onPress={() => this.setState({ butPressed: true })}>

代替

<TouchableOpacity onPress={this.setState({ butPressed: true })}>

将{this.setState}分配给不带箭头功能的onPress会导致一遍又一遍的渲染,因为setState将组件重新封装,然后再次进行onPress = {}的分配。 使用箭头功能会导致分配功能,因此只有在激活功能后才实际发生setState。 (仅在激活onPress时)

答案 1 :(得分:2)

超出最大更新深度。当组件在componentWillUpdate或componentDidUpdate中重复调用setState时,可能会发生这种情况。 React限制嵌套更新的数量以防止无限循环。

答案 2 :(得分:0)

如果使用的是Expo,请重新启动Expo(终止并再次打开)。我不知道,但这对我有用。