React native правильный способ отменить promis внутри компонента смонтировал и оптимизировал компонент

#react-native #promise #setstate #react-lifecycle

#react-native #обещание #setstate #реагировать-жизненный цикл

Вопрос:

Я пытаюсь обработать обещание внутри componentDidMount, я хочу предотвратить бесконечный вызов promise, поэтому я хочу реализовать переменную isMounted, но я не совсем понимаю, когда для isMounted установить значение false, чтобы отменить вызов promise.

Моя идея состоит в том, чтобы установить для isMounted значение false внутри componentWillUnmount .

Итак, моя логика состоит в том, чтобы вызвать обещание, когда компонент смонтирован, и оставить обещание, когда компонент размонтирован :

 async componentDidMount() {
    if (isMounted) {
      try {
        await RegistrationService.getData();
      } catch (error) {
        console.log(error);
      }
    }
  }

  componentWillUnmount() {
    isMounted = false;
  }
  

Я буду благодарен, если кто-нибудь поможет мне понять эти моменты жизненного цикла и когда я должен остановить вызов promise

Ответ №1:

Я думаю, что лучшим подходом было бы сделать что-то вроде этого:

      state = {
          ready: false
     }

     async componentDidMount() {
          if (ready === false) {
               try {
                    await RegistrationService.getData();
                    this.setState({ ready: true });
               } catch (error) {
                    console.log(error);
               }
          }
     }
  

И что касается этого:

Я буду благодарен, если кто-нибудь поможет мне понять эти моменты жизненного цикла и когда я должен остановить вызов promise

Изучайте функциональные компоненты и используйте хуки!!
Это изменит вашу жизнь (ну, вашу «реактивную» жизнь …)

Комментарии:

1. проблема в том, что я работаю над проектом уже год, и все мои компоненты являются функциональными компонентами, я должен начать использовать функциональный компонент в следующем проекте. мой вопрос: как вы думаете, это хорошая идея, чтобы сделать обещание зависящим от значения состояния готовности?

2. ДА. В противном случае я бы этого не предлагал.

3. и я должен назвать this.state.ready вместо ready?

4. Правильно. Мой плохой. Я слишком привык к функциональным компонентам.