Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redux #58

Closed
5 of 8 tasks
azu opened this issue Sep 13, 2015 · 18 comments · Fixed by #104
Closed
5 of 8 tasks

Redux #58

azu opened this issue Sep 13, 2015 · 18 comments · Fixed by #104
Labels
help wanted Extra attention is needed Status: Proposal Request for comments

Comments

@azu
Copy link
Owner

azu commented Sep 13, 2015

Reduxのアーキテクチャ

URL: https://github.com/rackt/redux

どう書ける?

import { createStore, combineReducers, applyMiddleware } from 'redux';

// applyMiddleware takes createStore() and returns
// a function with a compatible API.
let createStoreWithMiddleware = applyMiddleware(logger, crashReporter)(createStore);

// Use it like you would use createStore()
let todoApp = combineReducers(reducers);
let store = createStoreWithMiddleware(todoApp);

どういう仕組み?

どういう事に向いてる?

  • アスペクト的に前後に処理を挟めるためログ
  • 値自体は直接操作するわけではないが、受取るデータは変換できる

どういう事に向いていない?

  • 変換の仕組み上書き換え等を行うプラグインを扱いにくい 等

この仕組みを使ってるもの

  • Connectに似ている

チェックリスト

  • どう書ける?
  • どういう仕組み?
  • どういう用途に向いている?
  • どういう用途に向いていない?
  • この仕組みを使っているもの
  • 実装してみよう
  • エコシステム
  • 目次を追加
@azu azu added help wanted Extra attention is needed Status: Proposal Request for comments labels Sep 13, 2015
@azu
Copy link
Owner Author

azu commented Sep 14, 2015

@azu
Copy link
Owner Author

azu commented Nov 22, 2015

@azu
Copy link
Owner Author

azu commented May 1, 2016

やっぱりログがいいかな

@azu
Copy link
Owner Author

azu commented May 1, 2016

@azu
Copy link
Owner Author

azu commented May 1, 2016

logとtransformを作るのが正解っぽい

@azu
Copy link
Owner Author

azu commented May 1, 2016

これ分かりやすい http://briantroncone.com/?p=529

@azu
Copy link
Owner Author

azu commented May 1, 2016

Reduxのmiddlwareってstoreの値自体は改変できないけど、dispatchするactionは変更できる。
ここでaction自体を変更するケース何が存在するんだろ? timestampを付けるとか書いた

@azu
Copy link
Owner Author

azu commented May 1, 2016

export default (/*store*/) => next => action => {
    const timestampedAction = Object.assign({}, {
        timeStamp: Date.now()
    }, action);
    return next(timestampedAction);
};

こういう感じの以外にnextに対して変更したactionを与えるのって何があるんだろ?
return はBrian Troncone – Redux Middleware: Behind the Scenesを見ると分かりやすいけど、loggerをどっちにおくかで意味ができる感じ。
middlwaresの最初にloggerを置くなら、middlware適応後になって、最後に置くならmiddlware適応前になる。
やっぱり順序問題はconnectと似たような形で存在するけど、アプリケーションに対する値を改変する方法は少ないから少し安全な気がする。

@azu
Copy link
Owner Author

azu commented May 1, 2016

でも、middlwareを前提としたactionを作る傾向が強くて、
acdlite/flux-standard-action: A human-friendly standard for Flux action objects. とかまさにそれの塊で、metaにほげほげがあるなら、あるmiddlwareがそれを処理してみたいな事を書いてる傾向が強い気がする。
DSLプログラミングみたいな感じに見えてくる

@azu
Copy link
Owner Author

azu commented May 1, 2016

Redux middleware solves different problems than Express or Koa middleware, but in a conceptually similar way. It provides a third-party extension point between dispatching an action, and the moment it reaches the reducer. People use Redux middleware for logging, crash reporting, talking to an asynchronous API, routing, and more.

http://redux.js.org/docs/advanced/Middleware.html

とあって、connectとコンセプト自体は同じなのだけど、

It provides a third-party extension point between dispatching an action, and the moment it reaches the reducer.

と言ってる。
これは

export default function createLogger(options = defaultOptions) {
    const logger = options.logger || defaultOptions.logger;
    return store => next => action => {
        // => next middleware or dispatch action
        const value = next(action);
        // pass??
        return value;
    };
}

middleware-action

@azu
Copy link
Owner Author

azu commented May 6, 2016

@azu
Copy link
Owner Author

azu commented May 6, 2016

@azu
Copy link
Owner Author

azu commented May 6, 2016

ReduxとConnectのmiddlewareの違いについて考えてるけど、
Reduxは

  • 強制的な終わりは持てない
  • はじめに戻す(dispatch) か 次に進める
  • 入力の形式は不定
  • 知らない形式はnextに流す

中間をどうするのかが中心なかんじがする。
門番がそれぞれいる感じがする。
Connectはreq, resがきまってる感じがする

@azu
Copy link
Owner Author

azu commented May 9, 2016

@azu
Copy link
Owner Author

azu commented May 15, 2016

ReduxはdispatchしかなくてonDispatchがない世界観(=コールバック関数だけでやるみたない感じ)で、そうするこでどんなものもそこを通る世界観になってる。
この場合誰でもpreventDefaultみたいな止める存在に慣れるけど…、その辺はconnectと同じ

@azu
Copy link
Owner Author

azu commented May 15, 2016

#97 でDispatcherベースのMiddlewareを実装したので、コレベースで話をやる

@azu
Copy link
Owner Author

azu commented May 18, 2016

Breaking Change: reduxjs/redux#1744

@azu
Copy link
Owner Author

azu commented Jun 3, 2016

https://azu.gitbooks.io/javascript-plugin-architecture/content/ja/Redux/ Reduxの章ひとまず終わり!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed Status: Proposal Request for comments
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant