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

React/TypeScript集成Material UI后Select组件点击无响应问题

问题修复方案与选型建议

你的问题核心是MUI Select组件的value属性赋值错误——你把React元素<TimeUnitAnswer>传给了value,但MUI Select要求value必须和<MenuItem>的value属性值类型一致(这里是数字,也就是timeInMinutes),而且需要用状态管理选中值,否则组件无法正确响应选择事件。


修复代码的关键点

  1. 用状态管理选中值:先在组件内定义状态变量存储当前选中的时间值:
const [selectedTime, setSelectedTime] = useState<number>(currentTimeAnswer);
  1. 修正Select的value属性:把value={initialTimeUnitValue}改成value={selectedTime},对应MenuItem的数字类型value值。
  2. 更新onChange逻辑:先更新状态,再调用数据库更新方法:
onChange={(event) => {
  const newValue = Number(event.target.value);
  setSelectedTime(newValue);
  timeAnswerDbUpdate(newValue);
}}
  1. 移除错误的initialTimeUnitValue定义:这个React元素不需要作为value,直接用原始数值即可。

修复后的核心代码示例:

const [selectedTime, setSelectedTime] = useState<number>(currentTimeAnswer);

return(
  <FormControl>
    <InputLabel>Time</InputLabel>
    <Select
      name={props.question.type}
      id={props.question.id}
      value={selectedTime}
      onChange={(event) => {
        const newValue = Number(event.target.value);
        setSelectedTime(newValue);
        timeAnswerDbUpdate(newValue);
      }}
    >
      {filteredTimeUnitSelection}
    </Select>
  </FormControl>
);

是否改用MUI X TimePicker?

这取决于你的业务需求:

  • 如果你的选项是固定间隔的预定义时间点/时段(比如15分钟一档),修复后的MUI Select完全可以正常工作,没必要切换。
  • 如果需要用户自由选择任意时间(非预定义选项),或者想要更直观的时间选择界面(比如日历+时钟交互),MUI X TimePicker的用户体验会更好,更适合这类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:47:38