私はReduxでアプリケーションを書いているとし、第三者のライブラリを使ってログを追加することを前提としています。次のようにそのAPIは以下のとおりです。react/reduxアプリケーションのサービスインスタンスはどこに保持されますか?
let logger = createLogger('xyz');
logger.log('foobar');
私は間違いなく、アプリケーションの初期化時に一度だけ、ロガーインスタンスを作成したい:
function createLogger(token) {
// the logger has internal state!
let logCount = 0;
return {
log(payload) {
logCount++; // modify local state
fetch('/someapi', { // ship payload to some API
method: 'POST',
body: payload
});
}
};
}
は、私は、このようなライブラリーなものを使用します。しかし、問題はです。どこでロガーインスタンスを保存しますか?
最初の命令は、店のどこかに置くことです。しかしそれは良いアイデアですか?コードで説明したように、ロガーオブジェクトはステートフルで、クロージャーにカウンターを格納します。私は不変オブジェクトと同じように新しいインスタンスを取得しません。われわれが知っているように、状態は純粋な減速器の機能によってのみ変更されるべきです。
他の可能性は、reduxミドルウェアクロージャのどこかにインスタンスを作成するか、グローバル変数を作成することです。これは明らかにテスト容易性の点で悪です。
これは(私は思う)むしろ一般的なシナリオのベストプラクティスですか?
ES6モジュールを使用していますか?コンポーネント 'log'は直接呼び出すか、ストア/アクションによって自動的にログ記録されますか? – Tyrsius
はい、ES6モジュールを使用しています。他の質問については、私はこれらの呼びかけが自然の場であると思っています。私は自分のコンポーネントが副作用を起こさせたくない。 – VoY
ロガー自体がアプリケーション自体の状態に副作用を引き起こさない場合は、おそらくミドルウェアに属している可能性があります。しかし、あなたのコードからは不明な点がいくつか残っています。 (1)トークンパラメータの目的は何ですか? (2)logCount変数の目的は何ですか? (トークンもlogCountもポストリクエストに含まれません)(3)最後に、ペイロードは何ですか?それは行動や州から派生したものか? –