Эффект использования для извлечения API Blizzard

#reactjs #react-hooks #fetch

#reactjs #реагирующие крючки #принести

Вопрос:

Я пытаюсь просто выполнить выборку в API Blizzard, используя useEffect в качестве своего хука. Однако вызов проходит успешно, когда я пытаюсь установить свой ключ ={item.id } а затем попытайтесь извлечь нужную мне информацию через {item.race} Я получаю

 Failed to compile
./src/App.js
SyntaxError: /Users/gabrielcastro/Development/code/React/convergence/src/App.js: Unexpected token, expected "," (12:2)

  10 |   .then(response => response.races.json())
  11 |   .then(console.log(response.json())
> 12 |   },[races]) 
     |   ^
  13 |  
  14 | 
  15 |   return (
 

Вот как выглядит мой код… Я достал токен доступа только для этого поста.

 import React, { useState, useEffect } from 'react'

export default function App() {

  const [races, setRaces] = useState('races')
  const [items, setItems] = useState([])
  
  useEffect(() => {
  fetch(`https://us.api.blizzard.com/data/wow/playable-race/index?namespace=static-usamp;locale=en_USamp;access_token=`)
  .then(response => response.races.json())
  .then(console.log(response.json())
  },[races]) 
 

  return (
    <div>
    {items.map(item => {
   <li key={item.id}>
    Race: {item.name}
  </li>
  })}
     </div> 
     )
    }
 

ниже приведен краткий обзор информации, к которой я пытаюсь получить доступ
введите описание изображения здесь

Любая помощь приветствуется!

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

1. Возвращаете ли вы элементы списка на своей карте? Я думаю, вам следует удалить {} или добавить return

2. Да, я пытаюсь вернуть предметы, я пробовал с помощью и без — return ( <div> {items.map(item => { return <li key={item.id }> Раса: {item.name } </li> })} </div> //отображение поверх JSON ) }

Ответ №1:

.map() Метод доступен только для массивов. Данные, к которым вы пытаетесь получить доступ, могут быть объектом. Вам нужно перейти к races ключу, который содержит нужные вам данные и фактически является массивом, поэтому вы должны иметь возможность работать .map() с ним.

Можете ли вы попробовать установить races для атрибута в вашем состоянии что-то вроде response.races изоляции данных, с которыми вы хотите работать, затем повторите попытку.

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

1. Я попытался изменить состояние на const [response.races, setRaces] = useState('races') , однако теперь его не удалось скомпилировать

2. Внутри первого .then() сделайте console.log(response.json()) и обновите свой вопрос тем, что вы получите (фактический код, а не скриншот). Какую ошибку вы получили, когда попробовали мое предложение?

3. Вы сделали это не в том месте. Я имел в виду вот так: .then(response => response.races.json())

4. Хорошо, я обновил вопрос новой ошибкой, которую я получаю при попытке использовать .then(response => response.races.json())

5. Хорошо, измените все так, как это было, когда вы впервые задали вопрос, и попробуйте .then(json => setItems(json.races))