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

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

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

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

React.js

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

Q&A

解決済

1回答

631閲覧

[React Hooks]Dialogコンポーネントを使ったバリデーションを実現したい

aiai8976

総合スコア112

Material-UI

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

React.js

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

0グッド

0クリップ

投稿2020/04/23 02:36

編集2020/04/23 03:27

前提・実現したいこと

以前、react hook用のバリデーションライブラリを使用していたのですが、<Dialog>コンポーネントでは入力文字の取り出しがうまくいかなかったため、バリデーションを自作しようと思いました。
以下のコードのようにuseStateで切り替えようと思っているのですが、errMessageに文字列は入るもののUIとして表示されません。
わかる方がいましたらコメントお願いします。

該当のソースコード

const [err, setErr] = React.useState(false); //省略 var errMessage = ""; var error = err ? <span className={classes.validation}>{errMessage}</span> : <span></span>; const handleValidation = (e) => { let val = e.target.value; if (val == "") { errMessage = "入力必須"; console.log(errMessage); setErr(true); return; } else { errMessage = ""; setErr(false); return; } } 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} onChange={handleValidation} //追加 /> {error} //追加 </DialogContent>

###コメントから

setError(err ? <span className={classes.validation}>{errMessage}</span> : <span></span>)

このように変更しましたが、

The above error occurred in the <FormDialog> component:

このようなエラーが出ます

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

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

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

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

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

guest

回答1

0

ベストアンサー

今の状態ではerrorの変更をReactは認識できません。useStateで定義してこの中にspan要素を入れればいいのではないでしょうか。

js

1const [error, setError] = React.useState();

投稿2020/04/23 03:01

soliste16

総合スコア757

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

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

aiai8976

2020/04/23 03:28

追記しましたので確認お願いします。
soliste16

2020/04/23 03:35

条件式のまま入れたらそうなりますよ。 if (val == "") { setError(<span className={classes.validation}>入力必須</span>); return; } else { setError(<span></span>); return; } }
soliste16

2020/04/23 03:42

因みに以下はエラー文というより、どのコンポーネントでエラーが起こっているかを指しているだけで載せても意味はないですよ。 The above error occurred in the <FormDialog> component:
aiai8976

2020/04/23 04:42

いけました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問