You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ReactJS中基于API响应渲染下拉选择框

React下拉框无法渲染API获取的项目列表问题修复

你的代码存在几个关键问题,导致无法成功获取数据并渲染到下拉框中,下面是修正后的完整代码及问题说明:

修正后的代码

import React, { useEffect, useState } from "react";
import axios from "axios";

const getProjects = (setProjects) => {
    axios.get('https://mock-api.binaryboxtuts.com/api/projects', {
        headers: {
            Authorization: 'Bearer ' + localStorage.getItem('token')
        }
    })
    .then((res) => {
        setProjects(res.data);
    })
    .catch((ex) => {
        console.error('获取项目列表失败:', ex);
    })
}

const Dropdown = () => {
    
    const [projects, setProjects] = useState([])    

    useEffect(() => {
        getProjects(setProjects);
    }, [])

    return(
        <div>
            <label htmlFor="project-select">项目名称</label>
            <select id="project-select">
                <option value="">请选择项目</option>
                {projects.map(project => {
                    return <option key={project.id} value={project.id}>{project.name}</option>
                })}
            </select>                       
        </div>
    )
}

export default Dropdown

关键问题修正点

  • API地址补全:原请求仅写了/api/projects,axios会默认使用当前页面域名,需补全完整基础域名https://mock-api.binaryboxtuts.com
  • 请求头拼写修正:axios配置中请求头字段是headers(复数),原代码写为header会导致Authorization头无法正确携带
  • 状态更新逻辑补充:原getProjects函数未调用setProjects更新组件状态,拿到数据后无法传递到组件中;同时原函数未返回Promise,也无法在外部处理结果
  • useEffect依赖项优化:添加空数组依赖项,确保请求只在组件挂载时执行一次,避免重复请求
  • 表单关联修复:label的htmlFor与select的id统一为project-select,提升页面可访问性
  • 空状态处理:添加默认空选项,避免数据加载完成前下拉框无内容可选

注意:如果localStorage中没有存储有效的token,请求可能返回权限错误,请先确认token已正确存入。

内容的提问来源于stack exchange,提问作者kwanele_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:53:09