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

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

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

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

Q&A

解決済

2回答

1183閲覧

fluxアーキテクチャについて

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2016/12/29 22:30

fluxアーキテクチャについての質問です。
今fluxについて調べているのですが、少しわからない部分があります。
https://medium.com/@sotayamashita/漫画で説明する-flux-1a219e50232b#.5jht7e8xb

こちらの記事を読んでいたのですが、
”action creator は type と payload で action 作成します。type はシステムなかで action として定義したものの(通常は定数のリスト)ひとつになります。例えば、action はMESSAGE_CREATE または MESSAGE_READ にようになります。”
のような記事があるのですが、これはどのような意味になるのでしょうか?
私自身、JavaScriptにあまり馴染みがないのですが、typeやpayloadというのはJavaScriptでの何かの用語でしょうか?
http://qiita.com/yasuhiro-okada-aktsk/items/a14f7f37262fb6cf0bf8
こちらを見る限り、typeというのはアクション名、payloadというのはデータの種類、ということでよろしいでしょうか?
しかし、「typeはシステム中のactionとして定義したもののひとつ」になるというのと食い違ってしまいます。
ご存知の方、説明していただけると嬉しいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

type と payload は action の中身の事です。下記記事が参考になります。

Flux Standard Action - Qiita

実装上は、action は単なる Object で中身は何でもいいです。action は dispatcher を通じて store に渡されます。action の中身を吟味するのは store の役目です。何でもいいと言いながら、ある程度決まりを作っておかないと、action creator がどう action を作れば良いのか、store がどう action を判断すれば良いのかわかりません。そこで、標準的な作り方として、{type: 〜, payload: 〜}(他にもプロパティがある場合があります)という Object を渡すとしています。type プロパティには action の種類が入ります。ページ移動とか、ログインとか、閉じるとかです。payload プロパティには、その行動をするのに必要な情報が入ります。例えば、ページ移動しようにもどこに移動するかの情報が無ければ、移動できません。そういうときに payload に移動すべき場所を一緒にくっつけておきます。場合によっては payload が無い場合もあり得ます。例えば、ログアウトという action をする場合、特に他の情報は必要ありません。

もう一つ「通常は定数のリスト」となっているところの意味について説明します。action の type は action creator と store の両方で統一されてなければなりません。type として渡すのは通常文字列または Symbol です。さて、ログインするにも"LOGIN"なのか"LOGON"なのか統一されてなかったらどうなるでしょうか?うまく aciton が store に伝わるわけがありません。このように、action creator が"LOGIN"と文字列を直接書いてしまうと、些細なミスで動かないとなってしまいます。そこで、const LOGIN = "LOGIN";のような形で type に設定するものを定数として定義しておきます。action creator が actionを作るときは定数を使い、store 側もチェックするときは定数を使います。こうやって定数にしておけば、もし、勘違いでLOGONと書いても、そんな定数はないよとエラーになってくれます。エラーになる=テストの時に判明する、原因が特定しやすいと言うことです。これがもし文字列だったら、"LOGON"と書かれても、store は知らない文字列だから単に無視してしまいます。エラーにもならず、動かないだけです。そんな状態で原因を追及しようにも、action creator が action を間違っている作っている可能性、dispachtcher が渡していない可能性、store のログイン処理自体が間違っている可能性と、調べるところがたくさん出てきて大変です。そういったイージーミスをなくすために、定数のリストとして action の type を定義しておき、定数でしか利用しないようにするといいということです。

なお、サイトを見る限り、ちょっと直訳というか、技術にあまり詳しくない人が訳したという感じで、良い翻訳とは言えないかと思います。原文をあたってみた方が良いかもしれません。該当部分の私訳を載せておきます。

A cartoon guide to Flux より

The action creator creates an action with a type and a payload. The type will be one of the types that you have defined as actions in your system (usually a list of constants). An example of an action would be something like MESSAGE_CREATE or MESSAGE_READ.

私訳(超意訳)

動作屋(action creator)は、動作の種類(type)と付加情報(payload)が書かれた動作定義書(action)を作成します。この種類は、アプリケーションシステム内で動作(action)であると定義された種類一覧(通常、定数のリストとして定義されます)の中の一つです。動作種類の例として、メッセージ作成(MESSAGE_CREATE)メッセージ読込(MESSAGE_READ)のようなものがあります。

やり取りするオブジェクトとしての aciton と、動作そのものとしての action が混ざっているのでちょっとわかりにくいです(ネイティブの人にとってはわかるのかも知れませんが)。action について、「動作」を渡すと言うよりも「動作が書かれた何か」をやり取りしてると捉えるといいかと思います。

投稿2016/12/29 23:56

raccy

総合スコア21735

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

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

退会済みユーザー

退会済みユーザー

2016/12/31 04:01

回答ありがとうございました。
guest

0

こちらを見る限り、typeというのはアクション名、payloadというのはデータの種類、ということでよろしいでしょうか?

type はアクション名で payload はアクションに必要なデータです。関数名と引数のような関係です。

{ type: 'MESSAGE_CREATE', payload: 'Hello, welcome to flux world' }

に「'Hello, welcome to flux world'というメッセージを生成する」という意味をもたせる。このアクションが Store のどこに影響するかを dispatcher が判定するという感じでしょうか。

投稿2016/12/29 22:49

編集2016/12/29 23:31
mit0223

総合スコア3401

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

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

退会済みユーザー

退会済みユーザー

2016/12/29 22:53

回答ありがとうございます。 payloadについてですが、引数でしょうか? 説明の中では、payloadに設定した文字列を生成する、とおっしゃっておられますが、そうすると、それは引数というよりかは、関数の中身といった感じではないでしょうか?
mit0223

2016/12/29 23:27 編集

言葉の定義があいまいなので、なんともですが、typeとpayload が関数名と引数のような関係であるというのは間違っていないと思います。payload にはアクションのパラメータとなる具体的なデータを保持します。payload は荷台という意味で名付けられており、アクションに必要なデータを積んでいるということだと思います。 正直、 payload のどの部分がひっかかっておられるのかがわかっておりません。どのように直感とあわないのかをもう少し説明していただけると、何かヒントを提供できるかもしれません。
退会済みユーザー

退会済みユーザー

2016/12/30 05:41

typeが関数名であるというのは理解できました。raccyさんの回答やその回答中の関連リンクを見ると、引数というよりかはその中身や付加情報という感じがします。Javaで言いますと、System.out.println(String str)というメソッドがあった時に、関数はprintlnで引数はstrとなると思います。mit0223さんが言われている引数というのはこの引数と同義ではないのですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問