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

React页面加载时select标签未显示state设置的默认值如何解决

问题根因

React 受控表单的select组件要求绑定的value值必须和某一个option的value属性严格相等(===),才会选中对应选项。
你的代码里初始state设置的是'2022',但3个选项的value分别是'1'、'2'、'3',没有任何一个option的value等于'2022',组件找不到匹配项时就会默认渲染第一个选项,又因为两边都是字符串类型,不存在类型不匹配的报错,所以控制台没有任何提示。

修复方案

二选一即可:

  • 方案1:调整option的value值,和年份文本、state初始值保持一致
    修改ExpenseFilter组件的选项配置:
<select
  value={props.value}
  onChange={props.selectHandler}
  className="form-select"
  aria-label="Default select example">
  <option value="2020">2020</option>
  <option value="2021">2021</option>
  <option value="2022">2022</option>
</select>

这种写法最直观,后续拿到选中值可以直接当年份用,不需要额外转换,是更推荐的写法。

  • 方案2:保留现有option的序号value,修改state初始值为匹配的序号
    如果业务逻辑要求option的value必须用1/2/3的序号,就把Expenses组件里的初始state改成对应2022选项的value:
const [value, setValue] = useState('3');

选这种方案需要额外加一层值和年份的映射,后续做列表筛选时要把序号转成对应年份再匹配:

const yearMap = {
  '1': '2020',
  '2': '2021',
  '3': '2022'
}
// 筛选逻辑里通过yearMap[value]拿到实际年份即可

注意:React 不会对受控表单的绑定值做隐式类型转换或内容匹配,写这类组件时优先检查绑定值和选项值是否严格相等,能避开绝大多数无报错的选中异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:19:51