gar*_*may 4 reactjs material-ui
我正在使用 MUI 作为组件。经过几天的痛苦调试,我发现当组件用于包装表单onSubmit时,我的表单没有调用该方法。Box请在下面找到最小的例子。为什么会发生这种情况?onClick不过效果很好。组件在这里不是Box一个有效的用例吗?我应该以不同的方式使用 API 吗?
import { Box, Button, TextField } from '@mui/material';
export function MainForm() {
const submitHandler = (e) => {
console.log('submit called');
e.preventDefault();
}
return (
<div>
<Box
component="form"
>
<form onSubmit={submitHandler}>
<TextField />
<Button type="submit">Submit</Button>
</form>
</Box>
</div >
)
}
Run Code Online (Sandbox Code Playgroud)
小智 8
由于您将 Box 组件定义为表单,因此您必须将其放置onSubmit在其中。
<Box component="form" onSubmit={submitHandler}>
<TextField />
<Button type="submit">Submit</Button>
</Box>
Run Code Online (Sandbox Code Playgroud)
您正在重写您的 MUI 组件,因此 Box 已经将自己假定为表单组件。
请考虑阅读MUI 文档中的覆盖 MUI 组件。
由于接受的答案并没有真正解释您的代码不起作用的原因,因此以下是一些注释:
Box component='form'意味着它Box实际上是一个带有额外垃圾的表单组件,您的代码将如下所示:
<form {...extraPropsFromBox}>
<form onSubmit={submitHandler}>
<TextField />
<Button type="submit">Submit</Button>
</form>
</form>
Run Code Online (Sandbox Code Playgroud)
HTML 5不支持嵌套表单,使用它会带来麻烦,在这种情况下,它可能会忽略submit嵌套表单中的处理程序,修复方法是删除外部处理程序。如果您不需要设置表单容器的样式,只需使用普通form标签即可。如果您想快速应用某些样式,请使用Box+ :form
<Box component="form" onSubmit={submitHandler} sx={{ maxWidth: 300, bgcolor: 'gray' }}>
<TextField />
<Button type="submit">Submit</Button>
</Box>
Run Code Online (Sandbox Code Playgroud)
我认为看到 API 我需要告诉它我想要包装哪个组件
所有 MUI 组件都有一个component允许您覆盖根组件的 prop。下面是Box钩子下的样子。您不必指定,component因为它们都有默认值:
function Box({ component = 'div', ...boxProps }) {
return <component {...boxProps} />
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9471 次 |
| 最近记录: |