#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))