Dva: Können Abonnements einige Beispiele oder Dokumentationen hinzufügen?

Erstellt am 19. Okt. 2016  ·  17Kommentare  ·  Quelle: dvajs/dva

Die Datenquelle kann die aktuelle Uhrzeit, die Websocket-Verbindung des Servers, die Tastatureingabe, die Änderung der Geolokalisierung, die Änderung des Verlaufsroutings usw. sein.

Sie können verstehen, woher dieses Setup und keyEvent stammen und wie Sie es schreiben, wenn es sich um einen Websocket oder etwas anderes handelt.

question

Hilfreichster Kommentar

Versuchte die Steckdose, nur als Referenz.

// 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'
        })
    })
}

Alle 17 Kommentare

Das heißt, dieser Schlüssel wird nur verwendet, um dem Entwickler zu helfen, eine bestimmte Art von Funktion hier zu markieren. Er übergibt nur Versand und Verlauf, und der spezifische Überwachungscode erfordert eine bestimmte Bibliothek eines Drittanbieters, um die Überwachung zu implementieren.

Ist mein Verständnis richtig?

Ja, hier wird das Schlüssel- / Wertformat verwendet. Derzeit dient es hauptsächlich dazu, das Format mit Effekten und Reduzierungen in Einklang zu bringen. Später wird die Funktion zur Kündigung von Abonnements unterstützt und der Schlüssel wird verwendet.

Ich verstehe, danke.
Aber ich denke, ich kann diesen Dokumenten die Bedeutung der obigen Diskussion hinzufügen. Möglicherweise stoßen Sie auf dasselbe Problem wie ich :)

Abonnements definieren lediglich einen Ort zum Abonnieren von Daten. Anschließend werden der Versand und der Verlauf übergeben. Zum Abonnieren oder Überwachen ist eine Klassenbibliothek eines Drittanbieters erforderlich. Ist das Verständnis? Versand ist der Versand im Speicher von Redux, und Verlauf ist der Verlauf im React-Router, ist das verstanden?

@ roc2539 Ja.

Kann ich in Abonnements auf den Inhalt von Status oder Requisiten im Setup zugreifen?

@gzbigegg Nein, lösen Sie die Aktion aus und lassen Sie den Effekt damit umgehen.

subscriptions: {
    setup ({ dispatch }) {
      dispatch({ type: 'query' })
    }
}

Es gibt zwei Fragen: Ich weiß nicht, ob es richtig ist. Das Dokument besagt, dass Ulme noch nie mit ihnen in Kontakt gekommen ist, und ich verstehe Abonnements nicht sehr klar.

  1. Nach dem Übergeben des Verlaufs und dem Ausführen von history.listen wird dieser ausgelöst, wenn sich die Route ändert. Ich weiß nicht, ob das Verständnis korrekt ist.
  2. Wann werden die Abonnements ausgelöst, die nur im Versand bestehen?

Ich würde gerne einige Abonnementbeispiele wie Websocket sehen

So disptchieren Sie zwei Aktionen im Setup

Es gibt kein klares Dokument über die Timing- und Injection-Parameter des Rückrufs in der Abonnementregistrierung @ roc2539. Können Sie es beantworten?

Nach dem Wechsel zur Hash-Route kann das Setup die Änderung der URL-Eingabe über die Tastatur nicht überwachen.
Die Verwendung von browserHistory ist jedoch in Ordnung.

 setup ({ dispatch }) {
      console.log('models-app') // 手动改变url地址,不会进此方法
      dispatch({ type: 'query' })

    },

Versuchte die Steckdose, nur als Referenz.

// 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'
        })
    })
}

Ich habe versucht herauszufinden, wie ein Abonnement mit einem bestimmten Schlüssel ausgelöst werden kann. Ursprünglich wird alles bei der Initialisierung einmal ausgeführt, sodass dieses Abonnement nur einen Abschluss von Versand und Verlauf bietet

Abonnements: {
Setup ({Versand}) {
Versand ({Typ: 'Abfrage'})
}}
} Dies ist nur die erste Ausführung einer Versandaktion. Es wird keine Abonnementaktion ausgeführt.

Plötzlich bemerkt

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen