axios 如何通过React中的用户输入按ID动态获取大学数据?

vlurs2pr  于 2022-12-18  发布在  iOS
关注(0)|答案(2)|浏览(155)

我有一个API,每当用户正确输入大学名称时,API就会根据ID动态获取大学信息。我使用get axios获取数据,下面是UI图像:

这是我目前为止写的代码:

import React, { useState } from "react";
import { Container, Form, Button} from "react-bootstrap";
// Form, Button, Col, Row, Spinner
import axios from "axios"
import './styles.css';

function App() {

    const [institutionId, setInstitutionId] = useState("")

    const submitHandler = (e) => {
        e.preventDefault();
        let userData = {
            institutionId: institutionId
        };
        const APIKey = "API key is hidden";
        axios
            .get(`https://api.data.gov/ed/collegescorecard/v1/schools.json?id=${institutionId}&fields=school.name,2020.student.size&api_key=${APIKey}`, JSON.stringify(userData), {
                headers: {
                    "Content-Type": "application/json",
                },
            })
            .then((response) => {
                if (response.status === 200) {
                    console.log("successfully posted to the server!!");
                } else {
                    console.log("it wasn't successful");
                }
            })
            .catch((err) => {
                console.error(`Error: ${err}`);
            });
        console.log(JSON.stringify(userData));
        // setInstitutionId("");
    };

    return (
        <Container>
        <div className="App">
            <h1>University Finder App</h1>
        </div>
            <Form onSubmit={submitHandler}>
                <Form.Group className="mb-3" controlId="formBasicEmail">
                    <Form.Label>Type University Name</Form.Label>
                    <Form.Control type="text" value={institutionId}
                                  onChange={(e) => setInstitutionId(e.target.value)} />
                </Form.Group>
                <Button variant="primary" type="submit">
                    Submit
                </Button>
            </Form>
        </Container>
    );
}

export default App;

提前感谢您的帮助,让我知道如果我需要澄清我的问题更多。

aamkag61

aamkag611#

由于用户不知道他想要搜索的大学的ID,我建议从该API获取所有大学并将其存储在列表中,然后使用select组件autocomplete填充大学列表,然后用户将开始键入大学的名称,他将获得从中选择的建议。

xoshrz7s

xoshrz7s2#

我不太确定我是否理解您的问题,是否需要做一些澄清。您当前的代码似乎会在单击提交按钮时从API获取数据,因为该查询是在submitHandler函数中执行的。您是否尝试在用户在表单中键入有效的大学ID后立即执行查询(IidoEe.没有点击提交按钮)?或者是将大学ID传递到请求本身的问题?一旦你回答了这些问题,我也许可以帮上忙。
编辑:谢谢你的澄清!我建议首先获取Map到大学名称的ID列表,并将其存储在某个州(如果您只需要在此组件中访问此列表,则使用useState的本地州即可)。

[{ id: 1, label: 'Harvard University'}, { id: 2, label: 'Princeton' }]

这可以用来填充下拉列表,当用户从下拉列表中选择一个选项时,原始API将通过下拉列表的onSelect处理程序使用选项的id属性调用。希望这能有所帮助。

相关问题