如何使用 React-Hook-Form 处理更改事件?
How can I handle the change event with React-Hook-Form?
我正在尝试使用 materialui select 的反应钩子形式控制器找出 onChange 事件,但我不知道如何在 select 更改为调用 handleChange 事件时触发该事件。我创建了一个沙箱来复制,我也有单独的 Warning: findDOMNode is deprecated in StrictMode
问题,我无法理解如何使用 createRef 来阻止它,但主要问题是 onChange 事件,因为我需要进一步呈现不同基于 Select 值的文本字段。
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>;
没有您在代码中定义的 Controller
的 onChange
方法。所以你可以删除它:
<Controller
control={control}
name="folderSelect"
onChange={() => console.log("hellow")} <- this one not required
defaultValue=""
我对你的问题的理解是,你希望在 select
值更新后立即触发 handleChange
。为此,您可以这样做:
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
onChange={(e) => {
onChange(e)
handleChange(e) <- call handleChange
}}
value={value ? value : ""}
name={name}
>
这是代码和演示:https://codesandbox.io/s/react-hook-form-select-onchange-forked-eqb20?file=/src/App.js:1533-1907
因此,如果您想在 select 的 onChange 上触发 handleChange,则只需将 onChange={onChange}
更改为 onChange={() => handleChange()}
。
注意: 如果您想删除 findDom 已弃用警告,只需从 index.js
[=15= 中的 ReactDOM.render
中删除 React.StrictMode
标签]
我正在尝试使用 materialui select 的反应钩子形式控制器找出 onChange 事件,但我不知道如何在 select 更改为调用 handleChange 事件时触发该事件。我创建了一个沙箱来复制,我也有单独的 Warning: findDOMNode is deprecated in StrictMode
问题,我无法理解如何使用 createRef 来阻止它,但主要问题是 onChange 事件,因为我需要进一步呈现不同基于 Select 值的文本字段。
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>;
没有您在代码中定义的 Controller
的 onChange
方法。所以你可以删除它:
<Controller
control={control}
name="folderSelect"
onChange={() => console.log("hellow")} <- this one not required
defaultValue=""
我对你的问题的理解是,你希望在 select
值更新后立即触发 handleChange
。为此,您可以这样做:
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
onChange={(e) => {
onChange(e)
handleChange(e) <- call handleChange
}}
value={value ? value : ""}
name={name}
>
这是代码和演示:https://codesandbox.io/s/react-hook-form-select-onchange-forked-eqb20?file=/src/App.js:1533-1907
因此,如果您想在 select 的 onChange 上触发 handleChange,则只需将 onChange={onChange}
更改为 onChange={() => handleChange()}
。
注意: 如果您想删除 findDom 已弃用警告,只需从 index.js
[=15= 中的 ReactDOM.render
中删除 React.StrictMode
标签]