私は現在、学習者のReact/Reduxアプリケーションを構築しています。サービスの依存性注入を行う方法については頭を悩ますことができません。reduxアクションクリエイターの依存性注入
具体的には:BluetoothService
(第三者図書館を抽象化している)は、Bluetoothを使用して他のデバイスをスキャンして接続するためのものです。
deviceActionCreators.js:
const bluetoothService = require('./blueToothService')
function addDevice(device) {
return { type: 'ADD_DEVICE', device }
}
function startDeviceScan() {
return function (dispatch) {
// The Service invokes the given callback for each found device
bluetoothService.startDeviceSearch((device) => {
dispatch(addDevice(device));
});
}
}
module.exports = { addDevice, startDeviceScan };
(私はサンク・ミドルウェアを使用しています)
私の問題は、しかし、である。このサービスは、アクションの作成者がこのようなものを使用します:アクション作成者にサービス自体を注入する方法は?
私はこれが良いパターンではないと思うので、ハードコードされたrequire
(またはimport
)を望んでいません。私はまた、私のワークステーション(ブルートゥースを持っていない)でアプリケーションをテストしている間モックサービスを使用できるようにしたい - 環境に応じて、同じインターフェースを持つ別のサービスが自分のアクション作成者の中に注入されたい。これは静的インポートを使用するだけでは不可能です。
メソッド自体(12b)のパラメータとしてbluetoothServiceを作成しようとしましたが、メソッド自体を純粋に効果的にしましたが、アクションを使用して問題をコンテナに移動するだけです。すべてのコンテナはサービスについて知っていなければならず、(例えば、小道具を介して)注入の実装を取得する必要があります。 また、別のアクション内からアクションを使用したい場合、同じ問題が再び発生します。
ゴール: 私のアプリで使用する実装のブートストラップ時間を決めたいと思います。 これを行うための良い方法やベストプラクティスはありますか?
その詳細な回答に感謝します。私は前にミドルウェアについて読んだが、今までそれを完全に把握していなかった。これは、反応を還元するアプリケーションでサービスを使用するための標準またはベストプラクティスといえますか? – Charminbear
ようこそ - 私もそれに苦労しました:) –
ありがとう!これを使用して、角度依存性注入をreduxとredux-thunkとシームレスに連携させることができました。これにより、AngularからReactへの移行がよりスムーズになります:https://gist.github.com/jasononeil/e835aeb2ce7b9f099616ef2098caac1d –