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

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

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

Riot.jsは、React.jsに似たコンポーネント指向なJSフレームワークです。非常に軽量であり、コンポーネントで設計しやすいといったメリットがあります。また、MVCのように分割できることも特徴です。

JavaScript

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

Q&A

解決済

1回答

1954閲覧

Fluxで複数アクションの同時発行はOKなのか

pandanoir

総合スコア72

Riot.js

Riot.jsは、React.jsに似たコンポーネント指向なJSフレームワークです。非常に軽量であり、コンポーネントで設計しやすいといったメリットがあります。また、MVCのように分割できることも特徴です。

JavaScript

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

0グッド

0クリップ

投稿2016/08/06 07:04

状況

このような状況を想定しています。

  • <input type="text">年というパーツと、<button>うるう年</button>というパーツがある。
  • 決定ボタンは一つ上の要素が管理している(ほかにも月や日、曜日といったパーツがあり共通化したかった)
  • <input>が編集されたら、逐一上の要素へ変更を通知したい(そうしないと決定ボタンが押されたとき困る)
  • 決定がおされるか、うるう年が押されたらアラートを出したい。
  • アラートは 「XX年」あるいは「うるう年」と表示させたい。

コード

とりあえずコードみてください。JavaScriptで Riot + RiotControlという構成です。

html

1<my-form></my-form>

javascript

1<my-form> 2 <my-editor></my-editor><button onclick={finish}>決定</button><br> 3 RESULT: {value} 4 <script> 5 this.on('mount', _ => riot.mount('my-editor', 'my-year-editor')); 6 const action = new class Action { 7 finish() {RiotControl.trigger('finish');} 8 }; 9 const store = new class Store { 10 constructor() { 11 riot.observable(this); 12 this.value = ''; 13 this.actionTypes = { 14 changed: 'store-changed' 15 }; 16 this.on('edit', text => { 17 this.value = text; 18 this.trigger(this.actionTypes.changed); 19 }); 20 this.on('finish', _ => alert(this.value)); 21 } 22 } 23 this.finish = _ => { 24 action.finish(); 25 } 26 this.value = store.value; 27 RiotControl.addStore(store); 28 store.on(store.actionTypes.changed, _ => { 29 this.value = store.value; 30 this.update(); 31 }); 32</my-form>

javascript

1<my-year-editor> 2 <input type="text" onkeyup={edit}><button onclick={leap}>うるう年</button> 3 <script> 4 const action = new class Action{ 5 edit(text) { 6 RiotControl.trigger('edit', text); 7 } 8 finish() { 9 RiotControl.trigger('finish'); 10 } 11 }; 12 this.edit = e => action.edit(e.target.value + '年'); 13 this.leap = _ => { 14 // 以下が疑問のコード。editとfinishを発行している 15 action.edit('うるう年'); // <my-form>内のstoreの値を変更する必要がある 16 action.finish(); // うるう年ボタンは決定ボタンの役割も兼ねる 17 } 18</my-editor>

長文になってしまいすみません…回答していただけると嬉しいです

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問の本題としては、そういう組み方をしてOKなのか?ってことですか?
Fluxという概念に沿っているのか?ということが疑問なのでしょうか。

正直個人的にはプロジェクトがどのように動作したいかの方が重要だと思っているので、意図通りに動いていてかつほかに影響がなく、管理上問題なければなんでもいいと思います。

ただプロジェクトのルールとしてFluxと決めているなら想定されないデータフローはすべきではないかもしれません。

投稿2016/08/06 07:45

NatsumiOki

総合スコア1298

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

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

pandanoir

2016/08/06 08:04

「こういう風にActionを同時に発行するのはFluxという概念に沿っているのか」が質問の本題です。 確かにデータフロー的に考えると一方通行ではなく枝分かれした構造になるわけなので、マズイような気がします… 枝分かれを解消するにはどうしたらいいでしょうか?あるいは枝分かれは解消する必要はないのでしょうか?
NatsumiOki

2016/08/06 08:10

先の回答の通り個人的には別にいいじゃんって思いますが、Fluxの概念をどこまで厳密にするかによりますかね。 枝分かれといっても、 「うるう年ボタンを押したらアラートする」 「決定ボタンを押したらアラートする」 このデータフローは問題ないはずです。 「うるう年ボタンを押したらうるう年の設定を反映する」という部分のアクションが切り分けられていれば良いのではないでしょうか?
pandanoir

2016/08/06 08:13

コードの重複にはなりますが、そうするのがやはりベターですかね…ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問