Как получить указанные c данные из API, используя URL - PullRequest
0 голосов
/ 03 марта 2020

Возможно, это легко исправить, но я не вижу решения. Мой проект, на который я потратил слишком много времени, наконец-то начинает закрываться, однако я подошел к самому концу и у меня возникли проблемы с API, с которым я работаю.

Я ожидаю, что всякий раз, когда я буду использовать свой матч в HeroDetail, я смогу использовать этот идентификатор, чтобы найти данные героя, которые я хочу отобразить, когда вы нажмете на них. Мои другие компоненты работают именно так, как я считаю, они должны. Они направляют меня на мою страницу HeroDetail с идентификатором c героя, на которого я нажимаю.

Проблема, с которой я сталкиваюсь, заключается в том, что с этим API я не знаю, как использовать этот идентификатор для извлечения heroStats для этого указанного c идентификатора.

Я подумал, что смогу добавить немного параметров в конце URL-адреса, например ? _ Id = $ {} , но это не удалось. URL API - https://docs.opendota.com/#section / Введение , если вы также хотите немного прочитать о нем. Я не смог найти ничего, что могло бы мне помочь.

import React, {useState, useEffect} from "react";
import "./App.css";


function HeroDetail({match}) {

    useEffect(() => {
        fetchHero();
        console.log(match)
    },[]);

    const [item, setItem] = useState([]);

    const fetchHero = async () => {
        const fetchHero = await fetch(`https://api.opendota.com/api/heroStats}`);
        const item = await fetchHero.json();
        setItem(item);
        console.log(item)
    };
    return(
        <div>
           <h1>{item.id} </h1>
        </div>
    );
}

export default HeroDetail;

Ответы [ 3 ]

2 голосов
/ 03 марта 2020

Я собрал небольшой CodeSandBox с рабочим примером того, о чем я говорил в комментариях ОП.

https://codesandbox.io/s/silent-leftpad-cbjb3?fontsize=14&hidenavigation=1&theme=dark

0 голосов
/ 03 марта 2020

Как документ API, мы можем видеть, что он даст массив объектов.

[{"id": 0, "name": "string", "localized_name": "string", "img": "string", "icon": "string", "pro_win": 0, «pro_pick»: 0, «hero_id»: 0, «pro_ban»: 0, «1_pick»: 0, «1_win»: 0, «2_pick»: 0, «2_win»: 0, «3_pick»: 0, «3_win»: 0, «4_pick»: 0, «4_win»: 0, «5_pick»: 0, «5_win»: 0, «6_pick»: 0, «6_win»: 0, «7_pick»: 0, «7_win» ": 0}]

Итак, если вы хотите получить доступ к идентификатору, то в вашем случае будет работать item [0] .id, или вы можете использовать find

const found = item. find (element => element.id == 'любой идентификатор');

console.log (найдено);

0 голосов
/ 03 марта 2020

Opendota не предоставляет API для получения HeroStat по идентификатору. Но вы можете получить HeroStats только один раз. Храните их в своем магазине (если вы используете Redux). Используйте filter из find, чтобы получить точное значение heroStat с вашим идентификатором. Кроме того, вы можете использовать повторный выбор для создания запомненных селекторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...