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

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

詳細はこちら
React.js

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

Q&A

解決済

1回答

135閲覧

Reactのコード読解

Akira1206

総合スコア5

React.js

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

0グッド

1クリップ

投稿2019/10/21 23:13

前提・実現したいこと

コード読解

発生している問題

以下(React)の、 dispatch=>({})の構造が分かりません。

該当のソースコード

React

1const mapDispatchToProps = dispatch => ({ 2 onTodoClick(id) { 3 dispatch(toggleTodo(id)); 4 } 5});

試したこと

アロー関数を調べましたが、
アロー関数であれば、()=>{}となるはずで、
()=>({})となるのは、オブジェクトを返すときだけなはずです。
なぜ、上記のようなdispatch=>({})となるのでしょうか。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

アロー関数です。アロー関数では渡す引数が1つの場合、引数を囲むカッコは省略できることになっていますので、次の各例はいずれも同じ動きをします。

js

1const mapDispatchToProps = function(dispatch) { 2 return { 3 onTodoClick(id) { 4 dispatch(toggleTodo(id)); 5 } 6 }; 7}); 8 9const mapDispatchToProps = (dispatch) => { 10 return { 11 onTodoClick(id) { 12 dispatch(toggleTodo(id)); 13 } 14 }; 15}); 16 17const mapDispatchToProps = dispatch => { 18 return { 19 onTodoClick(id) { 20 dispatch(toggleTodo(id)); 21 } 22 }; 23});

onTodoClick(id) { ...} をメンバーとして持つオブジェクトを返しています。

アロー関数では、return文も省略して書くことができます。たとえば、次の2例は同じ動きをします。

js

1 2['Alice', 'Bob', 'Charlie'].filter(val => { 3 return val.indexOf('i') !== -1 4}); 5// -> ['Alice', 'Charlie'] 6 7['Alice', 'Bob', 'Charlie'].filter(val => val.indexOf('i') !== -1); 8// -> ['Alice', 'Charlie'] 9

同様にオブジェクトを返すときにもreturnを省略して書きたいと考えた場合、
mapDispatchToProps = dispatch => {onTodoClick(id) { ... }} となってしまいますね。
これでは、 dispatch => {} の波括弧が、 function() {} の波括弧なのかオブジェクトリテラルの波括弧なのかわかりません。
そこで、 dispatch => ({...}) の形にしてやることで、オブジェクト {...} を返すということを明確にしています。

投稿2019/10/21 23:32

thyda.eiqau

総合スコア2982

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

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

Akira1206

2019/10/21 23:42

ありがとうございます! 解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問