Как отправить полученный ответ API другому компоненту?

Я использую Weatherbit API для создания веб-APP. Я использую ответ API в файле App.js, затем сохраняю его в состояние, а затем передаю это состояние другому компоненту. Но этот компонент получает начальное значение (пустой объект) этого состояния, а не ответ API. ПОСМОТРИТЕ код ниже.

function App() {

  const [details, setDetails] = useState({ "value": "First" })
  const [url, setUrl] = useState("")

  const fetchWeather = async () => {
    const { data } = await Axios.get(`https://api.weatherbit.io/v2.0/current?city=Modasa&key=24d74085081e4ec7b4971bec0a1f2ef3`)

    // const details = data.data[0]
    console.info(data)
    setDetails(data)
  }

  useEffect(() => {
    fetchWeather()
  }, [])

  return (
    <div className = "App">
      <SectionOne data = {details} />
    </div>
  );

}

export default App;

** И второй компонент, где я получаю начальное значение (пустой объект)**

const SectionOne = ({ data }) => {

  return (
    <div>

      <div className = "sectionOne">
        <span className = "region">{`${data.data[0].city_name}`}</span>
        <span className = "country">{data.data[0].country_code}</span>
      </div>

      <div className = "sectionTwo">
        <span className = "icon"><img source = {data.data[0].weather?.icon} /></span>
        <span className = "temp">{data.data[0].temp}</span>
        <span className = "unit">°C</span>
        <span className = "feels">Feels Like {data.data[0].app_temp} °C | {data.data[0].weather?.description}</span>
      </div>

      <div className = "sectionThree">
        <div><span>Wind</span>{data.data[0].wind_spd} KM</div>
        <div><span>Wind Dir.</span>{data.data[0].wind_cdir}</div>
        <div><span>Humidity</span>{data.data[0].current?.humidity} %</div>
        <div><span>Pressure</span>{data.data[0].pres} MB</div>
        <div><span>UV Index</span>{data.data[0].uv}</div>
        <div><span>Visibility</span>{data.data[0].vis} KM</div>
      </div>

    </div>
  )
}

export default SectionOne
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
580
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

вы устанавливаете начальное состояние как { "value": "First" }, но компонент SectionOne ожидает данные в другом формате, попробуйте получить доступ к свойству data.data[0].city_name, которого не существует. следовательно, вы получаете ошибку.

Вы должны установить начальное состояние null

const [details, setDetails] = useState(null)

и иметь нулевую проверку в рендере. Это лучшая практика.

return (
    <div className = "App">
      { details && <SectionOne data = {details} /> }
    </div>
  );

Спасибо брат все заработало. Можете ли вы объяснить это, пожалуйста.

Kisan Kumavat 09.12.2020 18:45

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

Похожие вопросы

Ошибка аутентификации API Microsoft Graph: «Ошибка проверки маркера доступа. Недопустимая аудитория»
Как получить и отобразить данные из файла json в реакции на типскрипт
Пользовательский интерфейс материала: можно ли использовать компонент React в ячейке DataGrid вместо предопределенных типов ячеек («строка», «число», «дата», «дата и время»)?
Изменение цветов ToggleButton из реакции-загрузки
Обратный вызов не получает обновленную версию состояния, даже если он срабатывает после изменения состояния
ОШИБКА axios.get при использовании метода axios.create с использованием baseUrl
Запустить анимацию после загрузки страницы в ответ
Как вызвать дочерний элемент при нажатии на родительский элемент в React?
Как увеличить объект внутри массива массива объектов в React js?
Как установить объекты в качестве значений формы в реакции с пользовательским интерфейсом материала?