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

React开发:下拉选择值变更时如何获取对应_id且避免无限重渲染

报错原因解释

在map渲染option节点时直接调用setDepartmentId会触发组件重新渲染,而重新渲染时又会再次执行map逻辑、再次调用set方法,形成「渲染→调用set更新状态→触发重渲染」的无限循环,因此React触发了重渲染次数限制的报错。


正确实现方案

这里提供两种常用实现方式,优先推荐第一种,可靠性更高:

方案1:将_id作为option的value值(推荐)

直接用部门id作为下拉选项的取值,需要部门名称时再从部门列表中匹配即可,避免名称重复导致的匹配错误:

<FormGroup className="mb-1">
    <FormLabel>department</FormLabel>
    <Form.Control 
      as="select" 
      id="create"
      value={departmentId}
      onChange={e => {
          const selectedId = e.target.value
          setDepartmentId(selectedId)
          // 同步设置部门名称
          const selectedDept = departments.find(dept => dept._id === selectedId)
          setDepartment(selectedDept ? selectedDept.name : undefined)
      }}
      required>
        <option value="" selected>select department</option>
        {
            departments.map((dept)=> {
                return (
                    <option key={dept._id} value={dept._id} >
                        {dept.name}
                    </option>
                )
            })
        }
    </Form.Control>
</FormGroup>

方案2:通过选中的部门名称匹配_id

如果不想修改原有取值逻辑,仍然保留部门名称作为option的value,可在下拉变更时通过名称反查对应id:

<FormGroup className="mb-1">
    <FormLabel>department</FormLabel>
    <Form.Control 
      as="select" 
      id="create"
      value={department}
      onChange={e => {
          const selectedName = e.target.value
          setDepartment(selectedName)
          // 匹配对应部门id
          const selectedDept = departments.find(dept => dept.name === selectedName)
          setDepartmentId(selectedDept ? selectedDept._id : "")
      }}
      required>
        <option value="" selected>select department</option>
        {
            departments.map((dept)=> {
                return (
                    <option key={dept._id} value={dept.name} >
                        {dept.name}
                    </option>
                )
            })
        }
    </Form.Control>
</FormGroup>

内容的提问来源于stack exchange,提问作者Mark Willow Aldave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:57:02