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

React中设置API返回的第一个值为react-select默认值不生效如何解决

问题原因

defaultValue 是react-select的非受控属性,仅在组件首次挂载渲染时读取一次,后续更新不会生效。你首次渲染时接口还未返回,state为undefined,defaultValue初始就被设为空,接口返回数据后组件不会再重新读取该属性,因此默认值不显示。

解决方案

方案1:使用受控模式(推荐)

绑定value和onChange属性,手动控制选中值的更新,适配所有需要后续操作选中值的场景。
修改后代码如下:

import "./styles.css";
import Select from 'react-select'
import { useState, useEffect } from "react";
export default function App() {
  const [options, setOptions] = useState([]);
  const [selectedVal, setSelectedVal] = useState(null);
 
  useEffect(() => {
    fetch('https://jsonplaceholder.typicode.com/users')
    .then(response => response.json())
    .then(json => {
      const optionList = json?.map(i => ({label: i.name, value: i.name})) || []
      setOptions(optionList)
      setSelectedVal(optionList[0]) // 接口返回后直接设置默认选中值
    })
  },[])

  return (
    <div className="App">
      <Select
        value={selectedVal}
        onChange={setSelectedVal}
        options={options} 
      /> 
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

方案2:延迟渲染组件

等接口返回选项数据后再渲染Select组件,保证首次渲染时defaultValue已有值,适合不需要额外处理选中值的简单场景。
仅需修改渲染逻辑:

return (
  <div className="App">
    {/* 选项加载完成后再渲染组件 */}
    {options.length > 0 && <Select
      defaultValue={options[0]}
      options={options} 
    />}
    <h1>Hello CodeSandbox</h1>
    <h2>Start editing to see some magic happen!</h2>
  </div>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:04