🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

React.js

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

Q&A

1回答

1395閲覧

propsで渡される配列に改行を入れたい

Shibou

総合スコア15

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

React.js

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

0グッド

0クリップ

投稿2020/11/28 14:47

LaravelとReactでユーザ情報の登録機能を作っているのですが、
バリデーションで複数のエラーに引っかかった場合、
エラーメッセージを表示する際、複数の文章が改行されずに
1行にまとめられて表示されてしまいます。

エラーメッセージにスペースや改行コードを入れたり、
{}で渡されたpropsを囲んで、Object.keysに入れてmapやforeachを使ったり、
CSSでwhite-spaceをいじったりしてみたのですが全く効果がありません。

なんとか解決する方法を教えていただければ幸いです。

React

1//このような形でエラーメッセージが渡されています 2errorMessage: 3["入力されたパスワードと確認パスワードが一致していません!", "パスワードは4文字以上で入力してく…] 40:"入力されたパスワードと確認パスワードが一致していません!" 51:"パスワードは4文字以上で入力してください" 6new entry

↓エラーメッセージを表示するComponentです

React

1import React from "react"; 2 3import "./form-input.styles.scss"; 4 5const FormInput = ({ handleChange, label, errorMessage, ...otherProps }) => ( 6 <div className="group"> 7 {label ? <label className="form-input-label">{label}</label> : null} 8 <input className="form-input" onChange={handleChange} {...otherProps} /> 9 <p className="error-messages">{errorMessage}</p> 10 </div> 11); 12 13export default FormInput;

↓FormInputのcssです

SCSS

1.group { 2 display: flex; 3 flex-direction: column; 4 align-items: center; 5 font-size: 20px; 6 7 .form-input { 8 background: none; 9 background-color: rgb(250, 245, 246); 10 width: 50vw; 11 } 12 13 .form-input-label { 14 font-weight: bold; 15 color: rgb(7, 252, 109); 16 } 17 18 .error-messages{ 19 white-space: pre-line; 20 color: rgb(248, 14, 14); 21 } 22}

使われているFormRequestです

php

1<?php 2 3namespace App\Http\Requests; 4 5use Illuminate\Foundation\Http\FormRequest; 6 7class UserStorePost extends FormRequest 8{ 9 /** 10 * Determine if the user is authorized to make this request. 11 * 12 * @return bool 13 */ 14 public function authorize() 15 { 16 //有効化 17 return true; 18 } 19 20 /** 21 * Get the validation rules that apply to the request. 22 * 23 * @return array 24 */ 25 public function rules() 26 { 27 //Validationのルールを設定 28 return [ 29 'displayName' => ['required','min:3','max:10'], 30 'email' => ['required','unique:users'], 31 'password' => ['required','confirmed','min:4','max:8'], 32 'password_confirmation' => ['required'] 33 ]; 34 } 35 36 public function messages() 37 { 38 //Validationのエラーメッセージを設定 39 return [ 40 'displayName.required' => 'ユーザー名を入力してください!', 41 'displayName.min' => 'ユーザー名は最低3文字以上です!', 42 'displayName.max' => 'ユーザー名は最高10文字までです!', 43 44 'email.required' => 'メールアドレスを入力してください!', 45 'email.unique' => 'そのメールアドレスは登録済みです!', 46 47 'password.required' => 'パスワードを入力してください', 48 'password.confirmed' => '入力されたパスワードと確認パスワードが一致していません!', 49 'password.min' => 'パスワードは4文字以上で入力してください', 50 'password.max' => 'パスワードは8文字以内で入力してください', 51 52 'password_confirmation' => '確認パスワードを入力してください!', 53 ]; 54 } 55} 56

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

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

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

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

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

guest

回答1

0

{errorMessage.map((m, idx) => { return( <div key={idx}>{m}</div> )} )}

でどうでしょうか

投稿2020/11/28 16:23

web_inago

総合スコア74

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

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

Shibou

2020/11/29 02:59

試してみたのですが、 下記のエラーログが出て、画面が真っ白になってしまいました。 ------------------------------------------------------------------------- react_devtools_backend.js:2430 The above error occurred in the <FormInput> component: in FormInput (created by SignUp) in form (created by SignUp) in div (created by SignUp) in SignUp (created by Context.Consumer) in withRouter(SignUp) (created by Context.Consumer) in Route (created by Home) in Switch (created by Home) in div (created by styled.div) in styled.div (created by Home) in div (created by Home) in Home in Router (created by BrowserRouter) in BrowserRouter Consider adding an error boundary to your tree to customize error handling behavior. Visit https://fb.me/react-error-boundaries to learn more about error boundaries. ----------------------------------------------------------------------------
Shibou

2020/11/29 03:17

先程Object.valuesで連想配列を配列に変え、 joinで,つなぎの一つの文字列を作成し、 splitで,分割してmapを使うという形でうまく改行することができました。 -----------------実際のコード----------------------------------------- {Object.values({ errorMessage }).join().split(",").map((error, index) => ( <p key={index}>{error}</p> ))} -------------------------------------------------------------------- 3時間以上試行錯誤してましたが、ほかの方法だと 一つのタグ内に""で囲まれた文章が並んで表示されるという形か、上記のようなエラーが発生して画面が真っ白になってしまうと結果に終わりました。 コードが汚くてほかの方法を見つけたいので、 ほかの書き方に心当たりがございましたら教えていただきたいです。 ご回答いただき誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問