componentDidMount не вызывается после вызова навигации goBack - PullRequest
0 голосов
/ 01 июля 2018

Я установил StackNavigator, который будет запускать действие приращения для извлечения данных на componentDidMount, после перехода на другой экран и возврата к предыдущему экрану componentDidMount больше не запускается, и я получил белый экран. Я попытался сбросить StackNavigator с помощью StackActions.reset, но это просто приводит к тому, что другие мои экраны также не монтируются и, в свою очередь, представляют пустой экран. Есть ли способ заставить componentDidMount после this.props.navigation.goBack()?

Функция возврата назад

_goBack = () => {
  this.props.navigation.goBack();
};

Функция перехода на новый экран

_showQuest = (questId, questTitle ) => {
  this.props.navigation.navigate("Quest", {
    questId,
    questTitle,
  });
};

Редактировать: Привет, я все еще застрял в этом вопросе, и мне было интересно, есть ли у Сообщества решение для принудительного вызова componentDidMount после вызова Navigation.goBack () или, скорее, как отключить компонент после this.props.navigation.navigate называется

1 Ответ

0 голосов
/ 01 июля 2018

Компоненты не удаляются при изменении навигации, поэтому componentDidMount будет вызываться только при первом отображении.

Вы можете использовать этот альтернативный подход вместо:

class MyComponent extends React.Component {
  state = {
    isFocused: false
  };

  componentDidMount() {
    this.subs = [
      this.props.navigation.addListener("didFocus", () => this.setState({ isFocused: true })),
      this.props.navigation.addListener("willBlur", () => this.setState({ isFocused: false }))
    ];
  }

  componentWillUnmount() {
    this.subs.forEach(sub => sub.remove());
  }

  render() {
    if (!this.state.isFocused) {
      return null;
    }

    // ...
  }
}
...