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

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

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

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

Q&A

解決済

1回答

2643閲覧

reactのstateの更新について

退会済みユーザー

退会済みユーザー

総合スコア0

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

0グッド

0クリップ

投稿2017/04/13 15:53

#reactのstateの更新について
以下のコードをみてください。

javascript

1import React from "react"; 2import { Link, hashHistory } from "react-router"; 3import Errors from "./Errors"; 4import firebase from "firebase/firebase-browser"; 5 6const FORM_STYLE = { 7 margin: "0 auto", 8 padding: 30 9}; 10 11const SIGNUP_LINK_STYLE = { 12 display: "inline-block", 13 marginLeft: 10 14}; 15 16export default class Login extends React.Component{ 17 constructor(props){ 18 super(props); 19 this.state = { 20 email: localStrage.userEmail || "", 21 password: localStorage.userPassword || "", 22 errors: [], 23 }; 24 this.handleOnChangeEmail = this.handleOnChangeEmail.bind(this); 25 this.handleOnChangePassword = this.handleOnChangePassword.bind(this); 26 this.handleOnSubmit = this.handleOnSubmit.bind(this); 27 } 28 29 handleOnChagneEmail(e){ 30 this.setState({ email: e.target.value }); 31 } 32 33 handleOnChangePassword(e){ 34 this.setState({ password: e.target.value }); 35 } 36 37 // ログイン処理 38 handleOnSubmit(e){ 39 const { email, password } = this.state; 40 const errors = []; 41 let isValid = true; 42 e.preventDefault(); 43 if(!email.length){ 44 isValid = false; 45 errors.push("Email can't be blank"); 46 } 47 if(!password.length){ 48 isValid = false; 49 errors.push("Password can't be blank"); 50 } 51 if(!isValid){ 52 this.setState({ errors }); 53 return; 54 } 55 // Firebaseのログイン処理 56 firebse.auth().signinWithEmailAndPassword(email,password).then(()=>{ 57 // 次回ログイン簡略化のため、localStorageに値を保存 58 localStorage.userEmail = email; 59 localStorage.userPassword = password; 60 // チャットルーム一覧画面へ繊維 61 hashhistory.push("/rooms"); 62 }).catch(()=>{ 63 // Firebaseでログインエラーとなった場合 64 this.setState({ errors:["Incorrect email or password."] }); 65 }); 66 } 67 68 render(){ 69 return( 70 <form style={FORM_STYLE} onSubmit={this.handleOnSubmit}> 71 72 </form> 73 ); 74 } 75} 76

ログイン処理の中に

javascript

1if(!isValid){ 2 this.setState({ errors }); 3 return; 4}

という処理があります。
ここがわかりません。
setStateはnextStateを現在のstateにマージするということはわかるのですが、
errorsには配列が入っていますよね?
stateは{キー:バリュー}じゃないと更新できないのではないでしょうか?
なぜこの方法でthis.state.errorsだけ更新できるのでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

オブジェクト初期化子 - JavaScript | MDN

js

1this.setState({ errors });

これは

js

1this.setState({ errors: errors });

の省略形です。

投稿2017/04/13 18:04

mpyw

総合スコア5223

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

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

退会済みユーザー

退会済みユーザー

2017/04/14 00:03

Qiitaで何度もお世話になりました!! まさかここでもお世話にナルトは! 回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問