私はhtml5オーディオプレーヤーで作業していますが、状態(データ)を流すためのUIがなくてもReduxが良い解決策になるかどうかを判断しようとしています。非UIアプリケーション用のReduxアーキテクチャ
私は複数のモジュールを持っています:
再生モジュールを:audio要素からすべてのコールバックをカプセル化し、状態を更新するために、各コールバックの後にアクションを派遣。
ストリーミングモジュール:プリフェッチするどのセグメント、与えられた時間に必要されるセグメント、...
MediaSourceのモジュールを見つけ出すためのすべてのロジック:メディアソースモジュールは、すべてのアクションのラッパーですメディア・ソースおよびソース・バッファ。
質問1: audio要素は、それが遊んで、自分の状態のしている、、、CURRENTTIMEを求めて、一時停止...とReduxの状態は、audio要素の状態を反映しています。 それは良い方法ですか?私は、2つの州が異なる場所にあり、同期が外れていることに心配しています。
質問2: 誰が最初に更新されましたか? のは、私は私のプレーヤーを一時停止したいと想像してみましょう:
//Implementation 1:
function pause() {
dispatch({type:'PLAYBACK_PAUSED'}).then(()=> {
this.audio.paused = true;
});
}
// Implementation 2:
function pause() {
dispatch({type:'PLAYBACK_PAUSED'});
this.audio.paused = true;
}
// Implementation 3:
function pause() {
dispatch({type:'PLAYBACK_PAUSED'});
onPause();
}
function onPause() {
const state = getState();
if (this.audio.paused != state.paused) {
this.audio.paused = state.paused;
}
}
質問3: 0.5秒ごとに、オーディオ要素は、新しい現在の時間でのコールバックをトリガします。このコールバックがトリガされているとき、私は状態の現在の時刻を更新するアクションをディスパッチします。 ストリーミングモジュールは、この時点でどのセグメントが必要かを把握するためにその変更を認識し、将来のセグメントをプリフェッチする必要があるかどうかを知る必要があります。
どのように私のストリーミング・モジュールは、その状態変化を認識していると思われますか?そのような
?:
currentTime = 0;
...
const state = getState();
if (state.currentTime !== currentTime){
// Do Something...
// Do Something Else...
}
が
お返事ありがとうございます。私は質問#2について考えるので、onPauseはアクションや他のどこかにディスパッチするだけで、状態変化に反応し(rxjsで)、オーディオ要素を一時停止する必要があります。 この方法で、元に戻す/やり直すことができます。 – Gregory
同意します。それはうまくいくかもしれない。 –