コンポーネントのファイル内でPhoenixのグローバルchannel
オブジェクトに現在依存しているPlatformMain
というコンポーネントがあります。Phoenix + React NativeとRedux:チャネルオブジェクトはどこに置く必要がありますか?
let channel;
let socket = new Socket("...", {params: {token: window.userToken}});
socket.connect();
class PlatformMain extends React.Component {
componentWillMount() {
this.connectUser();
}
connectUser() {
const { user } = this.props;
channel = socket.channel("user_pool:" + user.email, { app: APP });
this.setupChannel();
}
setupChannel() {
channel.join()
.receive("ok",() => { console.log("Successfully joined call channel") })
.receive("error",() => { console.log("Unable to join") })
channel.on("match_found", payload => {
...
});
...
}
ユーザーがボタンを押すと、アクションをディスパッチしてメッセージをチャンネルにプッシュすることもできます。
onPress() {
console.log("APPROVE_MATCH");
const { peer, waitForResponse } = this.props;
approveMatch(peer);
channel.push("approve_match", { // <------ want to put this somewhere else
"matched_client_email": peer.email,
});
}
私が質問したいのは、channel.push呼び出しを「還元」したいのですが、どこに置くべきですか? API呼び出し以来、別の場所でchannel.push(...)
を持っていないのは気になりません。私はそうのようなReduxの-サガを使用してサガに入れるつもりだった:
function* approveMatch(action) {
const peer = action.payload.peer;
channel.push("approve_match", { // <------- but how would I get the same channel object?
"matched_client_email": peer.email,
});
}
export default function* watchMatchingStatus() {
yield takeEvery(matchingStatusActions.APPROVE_MATCH, approveMatch);
}
しかし、私は同じチャネルオブジェクトを指す必要があると思いませんか?どうすればいい?もし私がchannel
の初期化をそれ自身のファイルに入れて、それを複数の場所にエクスポートしてインポートすると、ファイルを複数回実行しないで、結果的にチャンネルに何度も参加しますか?
大変感謝! – Edmund