FormControl 有什么用?为什么使用它?应该如何使用?

IT技术 javascript reactjs forms material-ui single-page-application
2021-04-30 20:55:05

有人可以用外行的术语向我解释 FormControl 提供什么功能,以及为什么/如何使用它?

我在 React 中使用 Material-UI,我看到的许多表单示例都使用 FormControl,但我很难理解它的作用,以及我的项目是否有必要。

现在我只有一个名为 Form.js 的组件,我将所有表单元素包含在一个 div 中,如下所示:

return (
<div>
  <FormControl className={classes.formControl}>
    <InputLabel htmlFor="select-multiple-accounts">Account</InputLabel>
    <Select
      multiple
      value={accountName}
      onChange={handleAccountChange}
      input={<Input id="select-multiple-accounts" />}
      renderValue={
        selected => (
        <div className={classes.chips}>
          {
            selected.map(value => (
            <Chip key={value} label={value} className={classes.chip} />
          ))}
        </div>
      )}
      MenuProps={MenuProps}
    >
      {accountNames.map(name => (
        <MenuItem key={name.label} value={name.label} style={getStyles(name.label, accountName, theme)}>
          {name.label}
        </MenuItem>
      ))}
    </Select>
  </FormControl>
  <br /><br />
  <TextField
    id="job-number"
    label="Job #"
    className={classes.textField}
    value={props.jobNumber}
    onChange={handleJobNumberChange}
    fullWidth
  />
  <br /><br /><br />
  <TextField
    id="project-description"
    label="Project Description"
    placeholder="Provide a detailed description of the project:"
    className={classes.textField}
    multiline
    variant="outlined"
    value={props.projectDescription}
    onChange={handleProjectDescriptionChange}
    fullWidth
  />
</div>
  );
}

这个可以吗?还是我应该将所有内容都包装在 FormControl 中?如果是这样......你能解释一下为什么吗?我不确定将表单编码到 React Web 应用程序时的最佳实践是什么。我是 React Forms 的新手。

谢谢。

1个回答

来自官方 Material UI 文档FormControl API

提供诸如填充/聚焦/错误/表单输入所需的上下文依赖于上下文提供了高度的灵活性,并确保状态在 FormControl 的子项之间始终保持一致。此上下文由以下组件使用:

  • 表格标签
  • 表单助手文本
  • 输入
  • 输入标签

因此,如果您想使用上述功能,您应该将您的表单包装在一个 FormControl 组件中。