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

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

新規登録して質問してみよう
ただいま回答率
85.46%
React.js

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

Q&A

0回答

377閲覧

React のフォームでもし何も入力してなかったら送信時にalertの文字を追加する方法

21212121

総合スコア61

React.js

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

0グッド

0クリップ

投稿2020/06/03 05:41

編集2020/06/03 06:10

現在Reactのバリデーションで苦戦しております。
やりたい実装は、このようにもし何も入力してなかったらこの<p>必須項目が空欄です</p>のPタグを表示できる実装をしたいです。
イメージ説明

現在、オブジェクトとReactHooksを使って値を管理しております。

import React, { useState } from "react"; import Input from "../../components/UI/Input/Input"; import Button from "../../components/UI/Button/Button"; import classes from "./Auth.module.css"; const Auth = () => { const [authForm, setAuthForm] = useState({ username: { elementType: "input", elementConfig: { type: "name", placeholder: "name" }, value: "", validation: { required:false, isEmail: true }, valid: false, touched: false }, password: { elementType: "input", elementConfig: { type: "password", placeholder: "Password" }, value: "", validation: { required: true, minLength: 6 }, valid: false, touched: false } }); const checkValidity = (value, rules) => { let isValid = true; if (!rules) { return true; } if (rules.required) { isValid = value.trim() !== "" && isValid; } if (rules.minLength) { isValid = value.length >= rules.minLength && isValid; } if (rules.maxLength) { isValid = value.length <= rules.maxLength && isValid; } return isValid; }; const inputChangedHandler = (event, controlName) => { const updatedControls = { ...authForm, [controlName]: { ...authForm[controlName], value: event.target.value, valid: checkValidity( event.target.value, authForm[controlName].validation ), touched: true } }; setAuthForm(updatedControls); }; const formElementsArray = []; for (let key in authForm) { formElementsArray.push({ id: key, config: authForm[key] }); } const form = formElementsArray.map(formElement => ( <Input key={formElement.id} label={formElement.type} elementType={formElement.config.elementType} elementConfig={formElement.config.elementConfig} value={formElement.config.value} invalid={!formElement.config.valid} shouldValidate={formElement.config.validation} touched={formElement.config.touched} changed={event => inputChangedHandler(event, formElement.id)} /> )); return ( <div className={classes.Auth}> <form> {form} <Button btnType="Success">SUBMIT</Button> </form> </div> ); }; export default Auth;
const Input = (props: any) => { let inputElement = null; switch (props.elementType) { case "input": inputElement = ( <React.Fragment> <label className="form-label"> {props.elementConfig.label} <span className="required">必須</span> </label> <input className="form-input" {...props.elementConfig} value={props.value} onChange={props.changed} onKeyDown={props.onKeyPressed} /> {props.required === true ? ( <p className="form-input__error">必修項目が空欄です</p> ) : null} </React.Fragment> ); break;

送信ボタンをクリックしたら
イメージ説明
validation:{
required:true
}
に変更してもエラーが起きてうまくいきません。

根本的にバリデーションのやり方が間違っているのでしょうか?
React のフォームでもし何も入力してなかったら送信時にalertの文字を追加する方法を教えていただきたいです。

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

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

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

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

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

markey

2020/06/03 12:43

エラーが出ている箇所に関しては、構文のミスの気がします。 `setAuthForm({ username: {`という感じに、欠けてる波括弧(閉じる方も含め)を足してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問