как эта работа «не может выполнить обновление состояния реакции на неустановленном компоненте» - PullRequest
0 голосов
/ 26 сентября 2019

Я пытался гуглить, но ничего не получилось, поэтому я здесь.

Может ли кто-нибудь дать мне ответ с кодом, чтобы исправить это вместо комментария (я только начал работать с native native пару недель назад)

я перепробовал все решения на stackoverflow, но поскольку я новичок, я не знаю, как объединить решение с моим собственным кодом,Я получаю ошибку , когда регистрация успешна, и когда она успешна, она переходит к login.js и ТАМ , она получает эту ошибку.Так что я думаю, что проблема внутри SignIn.js.Вот мой код:

** РЕДАКТИРОВАТЬ!



export default class SignIn extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      username: "",
      email: "",
      visibleModalId: null
    };
  }

  static navigationOptions = ({ navigation }) => {
    const { params = {} } = navigation.state;
    return {
      title: "- SIGN IN -",
      headerRight: <View />,
      headerLeft: (
        <TouchableOpacity onPress={params.Cancel}>
          <Text style={styles.cancelBtn}>Cancel</Text>
        </TouchableOpacity>
      ),

  };

  cancel = () => {
    console.log("cancel");
    this.props.navigation.navigate("Home");
  };

  componentDidMount() {
    this.props.navigation.setParams({ Cancel: this.cancel });
  }

  renderModalContent = () => (
    <View style={styles.modalContent}>
      <Text style={styles.modalContentTitle}>{this.state.modalTitle}</Text>
      <Button
        onPress={() => this.setState({ visibleModal: null })}
        title="Close"
      />
    </View>
  );

  renderModalContentToHome = () => (
    <View style={styles.modalContent}>
      <Text style={styles.modalContentTitle}>{this.state.modalTitle}</Text>
      <Button onPress={this.closeModalThenHome} title="Close" />
    </View>
  );

Это будет затронуто, чтобы закрыть модальное окно, а затем перейдет к Home

  closeModalThenHome = () => {
    this.props.navigation.navigate("Home");
    this.setState({ visibleModal: null });
  };

  render() {
    let { fadeAnim } = this.state;
    return (
          <Modal
            isVisible={this.state.visibleModal === "fancyThenGoHome"}
            backdropColor="#B4B3DB"
            backdropOpacity={0.8}
            animationIn="zoomInDown"
            animationOut="zoomOutUp"
            animationInTiming={600}
            animationOutTiming={600}
            backdropTransitionInTiming={600}
            backdropTransitionOutTiming={600}
            onBackdropPress={this.closeModalThenHome}
          >
            {this.renderModalContentToHome()}
          </Modal>
    );
  }

  signIn = () => {
    fetch("http://-IP-/signin", {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        username: this.state.username,
        email: this.state.email
      })
    })
      .then(response => response.json())
      .then(res => {
        if (res.success === true) {
          this.setState({ visibleModal: "fancyThenGoHome" });
          this.setState({ modalTitle: res.message });
        } else {
          this.setState({ visibleModal: "fancy" });
          this.setState({ modalTitle: res.message });
        }
      })
      .catch(error => {
        console.error(error);
      });
}

Я пытался установить abortcontroller, но это тоже не сработало, надеюсь, кто-то может мне помочь.

Спасибо за ваше время

1 Ответ

0 голосов
/ 28 сентября 2019

Попробуй это.Этот код позволяет состоянию завершать обновление, а затем перемещается.Я упоминал об этом и в комментариях.

  closeModalThenHome = () => {
    this.setState({ visibleModal: null }, () => {
        this.props.navigation.navigate("Home");
    });
  };
...