前提・実現したいこと
material-uiとuseForm()を用いてバリデーションを行いました。
その際、バリデーションはうまくできたのですが、以前できていた入力文字の取り出しができなくなってしまいました。以下のように
inputRef={inputRef}
から
inputRef={register({ //省略 })}
へ変更しました。
色々調べてみると<form>内でuseFormを利用しているものはあるのですが、material-uiコンポーネントの<Dialog>でやってる例がなくて困っています。
わかる方がいましたらコメントお願いします。
発生している問題・エラーメッセージ
Uncaught (in promise) TypeError: Cannot read property 'value' of null
該当のソースコード
export default function FormDialog(props) { const classes = useStyles(); const [open, setOpen] = React.useState(false); const inputRef = React.useRef(null); const temp = [...props.name]; /** * バリデーション用state * @type {Object} */ const { handleSubmit, register, errors } = useForm(); const handleClickOpen = () => { setOpen(true); }; const handleClose = () => { setOpen(false); }; const submit = () => { if (props.id == 2) { props.onSubmit(inputRef.current.value); } else { temp.push(inputRef.current.value); //該当箇所 props.onSubmit(temp); } if (!errors.input) { setOpen(false); } }; // 省略 return ( <div> <Button variant="outlined" color="primary" onClick={handleClickOpen}> {buttonName} </Button> <Dialog open={open} onClose={handleClose} aria-labelledby="form-dialog-title"> <DialogTitle id="form-dialog-title">{dialogTitle}</DialogTitle> <DialogContent> <DialogContentText> {dialogContent} </DialogContentText> <TextField autoFocus margin="dense" label={label} name="input" fullWidth ///////inputRef={inputRef}////// //これだけだと取得できる inputRef={register({ //省略 })} /> {errors.input && <span className={classes.validation}>{errors.input.message}</span>} </DialogContent> <DialogActions> <Button onClick={handleClose} color="primary"> Cancel </Button> <Button onClick={handleSubmit(submit)} color="primary"> OK </Button> </DialogActions> </Dialog> </div> ); }
あなたの回答
tips
プレビュー