Как вернуть это состояние

У меня есть функция InternetStatus(), как показано ниже. Я вызываю эту функцию в render() через console.info, но она все равно показывает undefined? Как это исправить? Спасибо!

function InternetStatus() {

  NetInfo.fetch().then(state => {
    console.info("Connection type", state.type);
    console.info("Is connected?", state.isConnected);
    return (state.isConnected)
  });

}
render() {
    console.info(InternetStatus())    
    return (
        <View>
          <Text>
            hello
          </Text>
        </View>
      );
  }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

NetInfo.fetch() — это асинхронная функция, что означает, что функция InternetStatus возобновит выполнение, и в приведенном выше коде она ничего не возвращает, поэтому вы получаете неопределенность. Один из способов справиться — связать обещания.

function InternetStatus() {

  return NetInfo.fetch().then(state => {
    console.info("Connection type", state.type);
    console.info("Is connected?", state.isConnected);
    return (state.isConnected)
  });
}
render() {
    InternetStatus().then(result => {
        console.info(result)
    })    
    return (
        <View>
          <Text>
            hello
          </Text>
        </View>
      );
  }
}

Если вы хотите использовать ответ API в пользовательском интерфейсе, вам необходимо принудительно изменить состояние.

Спасибо за ваш ответ! Это сработало для меня! У меня есть дополнительные вопросы, могу ли я использовать это в if ()? как показано ниже if (InternetStatus()) if (!InternetStatus()) Как я могу получить результат?

BOAN 29.05.2019 04:58

Извините, я новичок в этом.

BOAN 29.05.2019 05:07

Нет, ты не можешь. Каждая асинхронная функция должна выполняться с .then() Вы можете изучить async/await, если хотите более чистый код.

varun agarwal 29.05.2019 05:34

Большое спасибо, я установил состояние для обработки результата. У меня это сработало :)

BOAN 29.05.2019 05:51

Другие вопросы по теме