Fel*_*e V 8 reactjs material-ui react-hook-form
使用 React Hook Form 和 material-ui 复选框组件提交表单构建时出现错误。复选框的数量是从我的 api 列表中构建的:
<Grid item xs={12}>
<FormControl
required
error={errors.project?.stack ? true : false}
component='fieldset'>
<FormLabel component='legend'>Tech Stack</FormLabel>
<FormGroup>
<Grid container spacing={1}>
{techs.map((option, i) => (
<Grid item xs={4} key={i}>
<FormControlLabel
control={
<Checkbox
id={`stack${i}`}
name='project.stack'
value={option.id}
inputRef={register({required: 'Select project Tech Stack'})}
/>
}
label={option.name}
/>
</Grid>
))}
</Grid>
</FormGroup>
<FormHelperText>{errors.project?.stack}</FormHelperText>
</FormControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
提交表单时,我收到以下错误(多次,每个复选框呈现 1 个):
Uncaught (in promise) Error: Objects are not valid as a React child (found: object with keys {type, message, ref})。如果您打算渲染一组子项,请改用数组。
我不明白这个错误。该消息显然表明这是一个渲染问题,但组件渲染良好。问题发生在提交。有什么建议吗?
谢谢
Rom*_*kyi 10
如果有人很难使用 React Material-ui 和 React-Hook-Form 实现多选复选框,你可以查看我的Codesandbox 示例
此外,react-hook-form 在其文档中的章节下提供了一个代码示例useController(不要忘记切换到复选框选项卡)。
更新:如果您使用的是 RHF >= 7,您应该使用props.field调用props.field.value和props.field.onChange。
您可以使用默认的复选框控制器:
<FormControlLabel
control={
<Controller
name={name}
control={control}
render={(props) => (
<Checkbox
{...props}
checked={props.value}
onChange={(e) => props.onChange(e.target.checked)}
/>
)}
/>
}
label={label}
/>
Run Code Online (Sandbox Code Playgroud)
我使用了 RHF 的控制器示例,但必须添加checked={props.value}:https :
//github.com/react-hook-form/react-hook-form/blob/master/app/src/controller.tsx
我设法在不使用控制器的情况下使其工作。道具应该在 FormControlLabel 内,而不是在 Checkbox 内
<Grid item xs={4} key={i}>
<FormControlLabel
value={option.id}
control={<Checkbox />}
label={option.name}
name={`techStack[${option.id}]`}
inputRef={register}
/>
</Grid>
))}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12422 次 |
| 最近记录: |