LoginSignup
5
6

More than 5 years have passed since last update.

ReduxとReflux

Last updated at Posted at 2016-05-29

内容:

  • Refluxの弱点
  • Reduxの説明
  • Reduxを動かす方法
  • Redux Dev Toolの説明
  • Homeup:RefluxとReduxの比較
  • 最後に

1. Refluxの弱点

  • Refluxは古いになりましたから、時代にとって、不具合になる 。また、Refluxの発達はだんだん止まっている。
  • 複雑な建築を使って、初心者にとって、分かりにくいです。 - 結果が少ないですが、たくさんコード、処理がかかります。
  • Dispatcherを使わない(実際はあるですが、小さく部分に分割する)、それで、管理にくいです。flux/reduxよりパフォーマンスが良くない。
  • 二つストアのデータの依存を管理にくいです。 - ビューはいつもストアから聞かなければなりませんです。ユーザーからビューを対話するとき、すべてを使っているビューをもう一度レンダーします。それで、レンダーのパフォーマンス(速度)が低くなります。 - Dev Toolがありません(Redux: https://github.com/gaearon/redux-devtools) - 各コンポーネントデータを保存するstateを使いますから、メモリがかかります。
  • ドキュメントが少ないです。インターネットでほとんど flux/reduxのドキュメントです

2. Reduxの説明

Reduxは”a predictable state container for JavaScript apps.”
Reduxは、ReactJSが扱うUIのstate(状態)を管理をするためのフレームワークです。Reactではstateの管理するデータフローにFluxを提案していますが、ReduxはFluxの概念を拡張してより扱いやすく設計されています。
Reduxはstateを管理するためのライブラリーなので、React以外にもAngularJSやjQueryなどと併せて使用することもできますが、Reactと使用するのが一番相性がいいです。

Reduxの要素:

Reduxの要素と、それらの相関図です。
* Action
* ActionCreator
* Store
* State
* Reducer
7402c7f4-a7b2-d4a2-e30d-d4ab5816487c.png

Reduxの3原則

Reduxの基本設計は以下の3つの原則に基づいて設計されています。
1. Single source of truth
アプリケーション内でStoreは1つのみとし、Stateは単独のオブジェクトとしてStoreに保持される。
2. State is read-only
Stateを直接変更することはできず、actionをStoreへdispatchすることでしかStateは変更できない。
3. Mutations are written as pure functions
Stateを変更する関数(Reducer)はpureな関数にする。

3. Reduxを動かす方法

a.セットアップ

  • 準備したストアーを受け取る: Root Componentはストアーを作って, 同時に該当するreducerをストアーに添付します。
  • store と componentの接続を作る
  • action callbackを作ります。

b.動かす方法

ユーザーはアクションを添付したビューを対話する
1-GNDs7SY53lEhp7mX8V25lw.png
アクションはフォーマットを戻ります。
1-p4EkWE_8upZ97Z0IapKDcQ.png

同時にアクションもストアーに送ります。
1-zmFp3bmDq7b6Bvlo8Ineag.png

ストアーはアクションを受け取る次第に、 現在のstateとアクションをroot reducerに送ります。
1-zrsSoAAyf4pqTMHiA6P8Ww.png

Root reducerはstateを受け取る次第に、小さく部分に分割すると、アクションと一緒に該当するreducerに送ります。
1--S_dYe6BoQBgwSRpF7Hriw.png

該当するreduceは受け取るstateから、state copy を作って、変更して、再度root reducerに送ります。
1-_R-rGNfKr2Xu2FlXNZNPJg.png

root reducerはすべて新しいstateを集まって、 storeに送ります。
1-bUMekI8QlEfFxSBCuVuIkw.png

storeはlayer bindingに新しい stateを報告します。
(layer bindingはstoreとviewを接続する部分です。すべてコンポーネントはストアーを接続できることを守ります。これはreduxです。 componentはデータを受け取るために、connect functionを使います。)

1-x6vBvUlFJktJqty56jr0QQ.png

layer bindingは新しいstateを送り返す要求をする。

1-qGatznV4QujuxGe49YfX5A.png

その時、layer bindingはview(を使うとこと)にデータをレンダリングする。
1-Je2mow8mjYLngXreGGlIEg.png

4.Redux Dev Toolの説明

687474703a2f2f692e696d6775722e636f6d2f4a34476557304d2e676966.gif

機能:
- すべてactionとstateをチェックできます。
- 前のアクションを戻られます。
- reducerのコードを変更すると、アクションの依存を再度実行します。
- reducerを実行しない場合は、起きたことを見えます。
- ページをリロードする場合は、デバッぐを続けられます。
セットアップ:

5.Homeup:RefluxとReduxの比較

NPMダウンロードの比較:
http://www.npmtrends.com/redux-vs-reflux-vs-flummox-vs-alt
Screen Shot 2016-05-30 at 17.40.52.png

Homeupにとって、Reduxの利益:
- Redux はroot storeを使うので、コード数を少なくなって、ダータ修理も簡単になります。(Homeupにとって、たくさん問題解決できる。例:すべて保存ボタン)
- 同じ場所ですべてstateを保存するので、管理やすいです。
- Reduxは データを変更したcomponentだけをレンダリングして、すべてcomponentをレンダリングではない。それで、パフォーマンスを高くなります。
- ビューはいつもストアから聞くことは必要がない、ストアーはアクションから聞いて、アクションを呼ばれる時、ストアーはreducerにstate送ります。後で、reducerはデータを修理して、再度componetをレンダリングします。
- Develop tool があるので、開発することは簡単になって、速度も速くなります。
- 開発するコミュニティを成長しているので、将来、良い改善があると思います。

6.最後に

以上がReduxの基礎となります。使うするために、以下の記事を参考にしてください。
http://redux.js.org/index.html
http://qiita.com/kiita312/items/49a1f03445b19cf407b7
http://www.youhavetolearncomputers.com/blog/2015/9/15/a-conceptual-overview-of-redux-or-how-i-fell-in-love-with-a-javascript-state-container
https://www.npmjs.com/package/redux

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6