Dva: Les abonnements peuvent-ils ajouter des exemples ou de la documentation?

Créé le 19 oct. 2016  ·  17Commentaires  ·  Source: dvajs/dva

La source de données peut être l'heure actuelle, la connexion Websocket du serveur, l'entrée au clavier, le changement de géolocalisation, le changement de routage de l'historique, etc.

Vous pouvez comprendre d'où viennent cette configuration et keyEvent, et comment l'écrire si websocket ou autre chose.

question

Commentaire le plus utile

J'ai essayé la prise, juste pour référence.

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

Tous les 17 commentaires

Autrement dit, cette clé n'est utilisée que pour aider le développeur à marquer un certain type de fonction ici. Elle passe simplement dans la répartition et l'historique, et le code de surveillance spécifique nécessite une bibliothèque tierce spécifique pour implémenter la surveillance.

Ma compréhension est-elle correcte?

Oui, le format clé / valeur est utilisé ici. Actuellement, c'est principalement pour garder le format cohérent avec les effets et les réducteurs. Plus tard, la fonction d'annulation d'abonnement sera prise en charge et la clé sera utilisée.

Je comprends, merci.
Mais je pense que je peux ajouter le sens de la discussion ci-dessus à ces documents, vous pouvez rencontrer le même problème que moi :)

abonnements définit simplement un endroit pour s'abonner aux données. Ensuite, la répartition et l'historique seront transmis. Comment s'abonner ou surveiller nécessitera une bibliothèque de classes tierce à implémenter. Est-ce que c'est une compréhension? L'expédition est l'envoi dans le magasin de redux, et l'historique est l'histoire dans le React-Router, est-ce compris?

@ roc2539 Oui.

Puis-je accéder au contenu de l'état ou des accessoires dans la configuration des abonnements?

@gzbigegg Non, déclenchez l'action et laissez l'effet le gérer.

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

Il y a deux questions, je ne sais pas si c'est exact, le document dit qu'elm n'a jamais été en contact avec eux et je ne comprends pas très bien les abonnements.

  1. Après avoir passé l'historique et exécuté history.listen, il sera déclenché lorsque l'itinéraire changera.Je ne sais pas si la compréhension est correcte.
  2. Quand les abonnements qui ne passent que dans l'envoi seront-ils déclenchés?

J'aimerais voir des exemples d'abonnement comme websocket

Comment répartir deux actions dans la configuration

Il n'y a pas de document clair sur les paramètres de synchronisation et d'injection du rappel dans l'enregistrement d'abonnement @ roc2539, pouvez-vous y répondre?

Après avoir changé la route de hachage, le programme d'installation ne peut pas surveiller le changement de l'entrée d'URL à partir du clavier.
Mais utiliser browserHistory est très bien.

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

    },

J'ai essayé la prise, juste pour référence.

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

J'ai essayé de savoir comment déclencher un abonnement avec une clé spécifiée. À l'origine, tout sera exécuté une fois lors de son initialisation, donc cet abonnement ne fournit qu'une clôture de l'envoi et de l'historique 😄

abonnements: {
setup ({dispatch}) {
dispatch ({type: 'query'})
}
} Il ne s'agit que de l'exécution initiale d'une action de répartition, il n'effectue pas réellement d'action d'abonnement.

Soudainement réalisé

Cette page vous a été utile?
0 / 5 - 0 notes