データソースには、現在の時刻、サーバーのWebSocket接続、キーボード入力、ジオロケーションの変更、履歴ルーティングの変更などがあります。
このセットアップとkeyEventがどこから来たのか、そしてWebSocketなどの場合にそれを作成する方法を理解できます。
つまり、このキーは、開発者がここで特定のタイプの関数をマークするのを支援するためにのみ使用されます。ディスパッチと履歴を渡すだけであり、特定の監視コードでは、監視を実装するために特定のサードパーティライブラリが必要です。
私の理解は正しいですか?
はい、ここではキー/値形式を使用しています。現在は、主にエフェクトやレデューサーとの整合性を保つためです。今後、サブスクリプションキャンセル機能をサポートし、キーを使用します。
わかりました、ありがとうございます。
しかし、私はこれらの文書に上記の議論の意味を追加できると思います、あなたは私と同じ問題に遭遇するかもしれません:)
サブスクリプションは、データをサブスクライブする場所を定義するだけです。次に、ディスパッチと履歴が渡されます。サブスクライブまたは監視する方法を実装するには、サードパーティのクラスライブラリが必要です。それは理解していますか? ディスパッチはreduxのストアでのディスパッチであり、履歴はreact-routerでの履歴です。
@ roc2539はい。
サブスクリプションのセットアップで状態または小道具のコンテンツにアクセスできますか?
@gzbigeggいいえ、アクションをトリガーして、エフェクトに処理させます。
subscriptions: {
setup ({ dispatch }) {
dispatch({ type: 'query' })
}
}
2つの質問があります。それが正しいかどうかはわかりません。ドキュメントには、elmがそれらに接触したことがないことが記載されており、サブスクリプションを明確に理解していません。
websocketのようなサブスクリプションの例を見たいです
セットアップで2つのアクションを区別する方法
サブスクリプション登録@ roc2539には、コールバックのタイミングとインジェクションパラメータに関する明確なドキュメントがありません。回答できますか?
ハッシュルートに変更した後、セットアップはキーボードからのURL入力の変更を監視できません。
ただし、browserHistoryを使用することは問題ありません。
setup ({ dispatch }) {
console.log('models-app') // 手动改变url地址,不会进此方法
dispatch({ type: 'query' })
},
参考までに、ソケットを試してみました。
// model
import * as service from '../services/socket';
subscriptions: {
socket({dispatch}){ // socket相关
return service.listen(data => {
switch (data.type) {
case 'connect':
if (data.state === 'success') {
dispatch({
type: 'connectSuccess'
})
} else {
dispatch({
type: 'connectFail'
})
}
break;
case 'welcome':
dispatch({
type: 'welcome'
});
break;
}
})
}
},
// services
import io from 'socket.io-client';
let socket = '';
export function listen(action) {
if (socket === '') {
try {
socket = io("localhost:3000");
action({
type: 'connect',
state: 'success'
});
} catch (err) {
action({
type: 'connect',
state: 'fail'
});
}
}
socket.on('welcome', () => {
action({
type: 'welcome'
})
})
}
指定されたキーでサブスクリプションをトリガーする方法を見つけようとしていますが、元々、初期化時にすべて1回実行されるため、このサブスクリプションはディスパッチと履歴の終了のみを提供します😄
サブスクリプション:{
セットアップ({ディスパッチ}){
dispatch({type: 'query'})
}
これはディスパッチアクションの最初の実行にすぎず、実際にはサブスクリプションアクションを実行しません。
いきなり気づいた
最も参考になるコメント
参考までに、ソケットを試してみました。