質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

1283閲覧

[React]material-uiとuseForm()による入力文字の取り出し方がわからない

aiai8976

総合スコア112

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2020/04/22 00:28

編集2020/04/22 01:37

前提・実現したいこと

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> ); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問