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

React页面加载时调用API渲染Select下拉选项的实现问题咨询

解决方案

核心问题

  • request.fetchData() 是异步接口方法,你当前的同步取值逻辑拿到的是Pending状态的Promise对象,并非接口实际返回的业务数据,存入state后无法正常遍历渲染
  • useState未设置初始值,且未对嵌套字段做存在性校验,极端场景下会触发JS报错阻塞渲染

修复后代码

import { useState, useEffect } from 'react';
import { Form, Select } from 'antd'; // 请确认已提前引入对应依赖

const AddNew = () =>{
  // 给state设置初始空对象,避免undefined引发的报错
  const [displayData, setDisplayData] = useState({});
  // 改为异步函数,await等待接口返回实际数据
  const fetchResellerData = async () =>{
    const data = await request.fetchData();
    setDisplayData(data);
  }
  useEffect(() => {
    fetchResellerData();
  }, [])
  return (
    <form> 
     <Form.Item label="状态">
       {getFieldDecorator("status", {
           rules: [{
                    required: true,
                    message: "请选择有效状态",
                  },
                ],
              })(
                <Select placeholder="请选择状态">
                  {/* 可选链兼容字段不存在的场景,兜底空对象避免遍历报错 */}
                  {Object.values(displayData?.activity_status || {}).map((status) => (
                    <Select.Option key={status} value={status}>
                      {status}
                    </Select.Option>
                  ))}
                </Select>
              )}
      </Form.Item>
    </form>
  )
}

补充说明

如果接口返回的activity_status本身就是数组结构,不需要Object.values转换,直接写displayData?.activity_status?.map(...)即可,你可以先打印接口返回值确认数据结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:03