1

私の Fluxxor アプリでは、アクション ハッシュ内から結果を解析するために ajax 呼び出しをプロキシしています。そのモジュール内から応答ペイロードをディスパッチできるようにしたいと考えています。フラックスインスタンスを渡すだけでこれを実行できると言われ、次のようにディスパッチできます。

flux.dispatcher.dispatch({type: SomeActionType, payload: somePayload});

私のactions.jsファイル:

/** 
*actions.js
*/

var api = require('./api');
var constants = require('./constants');

actions = {
  someAction() {
    ///  I want to dispatch some messages from inside the api module
    api.get('hello');
    // instead of doing it here
    this.dispatch(SomeActionType, somePayload);

  }
}

module.exports = actions;

フラックス インスタンスを api モジュールに渡す方法がわかりませんが、要求ごとに「get」メソッド呼び出しに渡す方法が適切ではありません。

フラックス インスタンスを API モジュールに取り込むにはどうすればよいですか?

アップデート:

node_modules にフラックス lib があることに気付きました。API モジュールでフラックスを要求することはできますか?

var flux = require('flux')

それから私はDispatcher.dispatchにアクセスできます..または、これはfluxxorの精神に違反していますか?

4

1 に答える 1

1

一般的なイディオムは、サードパーティ モジュールでリクエストを行い、アクション クリエーターでアクションをディスパッチすることです。これにより、Web API (Ajax リクエストを作成する) とストア固有の通知 (flux によって使用される) が明確に分離され、テストが容易になります。

actions = {
  someAction() {
    api.get('hello')
    .then((resp) => {
      // success case
      this.dispatch(SomeActionType, somePayload);
    }, (err) => {
      // failure case
      this.dispatch(SomeActionType, somePayload);
    });

  }
}

api = {
  get(param) {
    return whateverAjax(param);
  }
}

ただし、本当に API からアクションを起動したい場合は、依存関係を作成して順番に接続し、それらを渡すことができます。(これは、テストでモック インスタンスを渡すことができるため、テストにも役立ちます。)

// api.js

module.exports = (flux) => {
  return {
    get(param) {
      whateverAjax(param).then((resp) => flux.dispatcher.dispatch(...));
    }
  }
}

// actions.js

module.exports = (api) => {
  someAction() {
    api.get('hello');
  }
}

// whever you init your Fluxxor.Flux object...

var api = require("./api");
var actions = require("./actions");

var flux = new Fluxxor.Flux(stores); // no actions to start

api = api(flux);
actions = actions(api);

flux.addActions(actions);

追加の注意事項:flux質問の最後で言及したライブラリはFacebook の Flux ライブラリであり、Fluxxor とは何の関係もありません。

于 2015-01-05T16:45:22.953 に答える