2017-02-21 3 views
1

Ich habe eine Komponente namens PlatformMain, die derzeit auf ein globales channel Objekt von Phoenix innerhalb der Datei der Komponente definiert abhängt.Phoenix + React Native und Redux: Wo sollte ich Kanalobjekt setzen?

Wenn der Benutzer eine Taste drückt, würde ich gerne eine Aktion versenden und eine Nachricht an den Kanal senden.

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, 
    }); 
    } 

Meine Frage ist, wenn ich will den channel.push Aufruf „reduxify“, wo soll ich es sagen? Es fühlt sich komisch an, nicht die channel.push(...) woanders zu haben, da es sich um einen API-Aufruf handelt. Ich wollte es in einer Sage setzen wie so redux-Saga mit:

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); 
} 

Aber wäre nicht ich brauche, um den gleichen Kanal Objekt zu zeigen? Wie würde ich das tun? Wenn ich die Initialisierung der channel in einer eigenen Datei und ich exportieren und importieren Sie es an mehreren Stellen, würde es nicht die Datei mehrmals ausführen (und folglich den Kanal mehrmals beitreten)?

Antwort

1

Sie könnten die Initialisierung von channel in eine eigene Datei legen und sicher importieren mehrmals, die Auswertung des Moduls passiert nur einmal. Sie können the spec zur Bestätigung überprüfen:

Tun Sie nichts, wenn dieses Modul bereits ausgewertet wurde. Andernfalls werten Sie alle Modulabhängigkeiten dieses Moduls transitiv aus und werten Sie dieses Modul dann aus.

+0

Super danke! – Edmund

Verwandte Themen