Redux でアプリケーションを作成していて、サードパーティのライブラリを使用してログを追加する任務を負っているとします。その API は次のとおりです。
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
});
}
};
}
次に、ライブラリを次のように使用します。
let logger = createLogger('xyz');
logger.log('foobar');
私は間違いなく、アプリケーションの初期化中に一度だけロガー インスタンスを作成したいと考えています。しかし、問題は、ロガー インスタンスをどこに保存すればよいかということです。
最初の本能は、店のどこかに置くことです。しかし、それは良い考えですか?コードで示したように、ロガー オブジェクトはステートフルであり、クロージャーにカウンターを格納します。不変オブジェクトの場合のように、新しいインスタンスを取得しません。ご存知のように、状態は純粋なレデューサー関数を介してのみ変更する必要があります。
他の可能性は、redux ミドルウェア クロージャーのどこかにインスタンスを作成するか、単にグローバル変数を作成することです。これは、テスト容易性の点で明らかに悪です。
この(私が思うに)かなり一般的なシナリオのベストプラクティスはありますか?