this.backPressed не является функцией - PullRequest
0 голосов
/ 17 марта 2020

Я реализовал это в примере, он работает, но в моем основном проекте отображается сообщение об ошибке, что backPressed не является функцией.

backPressed = () => {
    setTimeout(function() {
      //Put All Your Code Here, Which You Want To Execute After Some Delay Time.
      BackHandler.exitApp();
    }, 3000);
  };

componentWillUnmount() {
    BackHandler.removeEventListener("hardwareBackPress", this.backPressed);
  }

componentDidMount() {
      BackHandler.addEventListener("hardwareBackPress", this.backPressed);  

}
static getDerivedStateFromProps(nextProps, prevState) {
    const { userdata } = nextProps.UserDetailReducer;

    const { UpdatingFailure } = nextProps.UpdateUserImageReducer;

    if (UpdatingFailure) {
      return {
        avatarSource: ""
      };
    }

    if (userdata.kenkoScore != "" && userdata.kenkoScore > 0) {
      setTimeout(() => {
        AsyncStorage.setItem("SCORE_FETCHED", "Yes");
        nextProps.navigation.navigate("TabNavigation");
      }, 100);
      return null;
    } else {
        ***this.backPressed();***
    }

    if (userdata) {
      return { userDetail: userdata };
    }

    return null;
  }

В componentDidMount он работает, но в getDerivedStateFromProps не работает

1 Ответ

1 голос
/ 17 марта 2020

getDerivedStateFromProps - это stati c, поэтому this относится к самому классу, а не к его экземпляру.

Сделайте backPressed stati c, чтобы позвонить с getDerivedStateFromProps. Вам также необходимо обновить componentWillUnmount и componentDidMount до ComponentName.backPressed или this.constructor.backPressed. Обратите внимание, что backPressed stati c означает, что вы не сможете получить доступ к this для реквизита или состояния в будущем.

...