如何使用 React-Hook-Form 处理更改事件?

Pau*_*ney 7 onchange reactjs material-ui react-hook-form

我正在尝试使用materialui select 的react hook 表单控制器来找出onChange 事件,但我无法弄清楚当select 更改以调用handleChange 事件时如何触发该事件。我创建了一个沙箱来复制,我也有单独的问题Warning: findDOMNode is deprecated in StrictMode我无法理解如何使用 createRef 来阻止这个问题,但主要问题是 onChange 事件,因为我需要根据 Select 渲染不同的进一步 TextFields -价值。

https://codesandbox.io/s/react-hook-form-select-onchange-uiic6

<form onSubmit={handleSubmit(onSubmit)}>
  <Grid container direction="column" spacing={2}>
    <Grid item>
      <FormControl fullWidth variant="outlined" className={classes.formControl}>
        <InputLabel id="demo-simple-select-label">Folder Name</InputLabel>
        <Controller
          control={control}
          name="folderSelect"
          onChange={handleChange}
          defaultValue=""
          render={({onChange, value, onBlur, name}) => (
            <Select
              labelId="demo-simple-select-label"
              id="demo-simple-select"
              onChange={onChange}
              value={value ? value : ''}
              name={name}>
              <MenuItem value="Invoices" key="Invoices">
                Invoices
              </MenuItem>
              <MenuItem value="Statements" key="Statements">
                Statements
              </MenuItem>
              <MenuItem value="Credits" key="Credits">
                Credits
              </MenuItem>
            </Select>
          )}
        />
      </FormControl>
    </Grid>
    <Grid item>
      <TextField
        fullWidth
        label="First Name"
        name="firstName"
        variant="outlined"
        onChange={(e) => console.log(e.target.value)}
        inputRef={register({required: true})}
      />
    </Grid>
    <Button type="submit">Submit</Button>
  </Grid>
</form>;

Run Code Online (Sandbox Code Playgroud)

Shu*_*rma 11

没有您在代码中定义onChange的方法。Controller所以你可以这样删除它:

<Controller
                    control={control}
                    name="folderSelect"
                    onChange={() => console.log("hellow")} <- this one not required
                    defaultValue=""
Run Code Online (Sandbox Code Playgroud)

handleChange我对你的问题的理解是,你想在值更新后立即触发select。为此,您可以这样做:

 <Select
                        labelId="demo-simple-select-label"
                        id="demo-simple-select"
                        onChange={(e) => {
                          onChange(e)
                          handleChange(e) <- call handleChange
                        }}
                        value={value ? value : ""}
                        name={name}
                      >

Run Code Online (Sandbox Code Playgroud)

这是代码和演示:https://codesandbox.io/s/react-hook-form-select-onchange-forked-eqb20 ?file=/src/App.js:1533-1907