Material-UI 的 Switch 开关怎么绑定受控状态?
我用 Material-UI 的 Switch 组件时,想让它受控,但状态好像没生效。点了没反应,控制台也没报错,是我写错了啥吗?
我试了用 useState 管理 checked 状态,也传了 onChange,但开关点不动,一直是初始值。
import { Switch } from '@mui/material';
import { useState } from 'react';
function MyComponent() {
const [checked, setChecked] = useState(false);
return (
<Switch
checked={checked}
onChange={(e) => setChecked(e.target.checked)}
/>
);
}
如果点不动但控制台没报错,大概率是样式问题——检查一下 Switch 外面有没有设置 pointer-events: none 或者覆盖了点击区域。也有可能是父组件传了 props 覆盖了你的 checked 值。
给你个完整的可运行示例:
如果还是不行,在 onChange 里打个 console.log 看看事件有没有触发,event.target.checked 的值是什么。
还有一种常见坑:如果 Switch 被包在 FormControlLabel 或 FormGroup 里,它们自己也会管理状态,可能跟你抢控制权。检查一下有没有这种情况。