Dva: As assinaturas podem adicionar alguns exemplos ou documentação?

Criado em 19 out. 2016  ·  17Comentários  ·  Fonte: dvajs/dva

A fonte de dados pode ser a hora atual, conexão de websocket do servidor, entrada de teclado, mudança de geolocalização, mudança de roteamento de histórico, etc.

Você pode entender de onde vêm esta configuração e keyEvent, e como escrevê-los se for websocket ou outra coisa.

question

Comentários muito úteis

Tentei o soquete, apenas para referência.

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

Todos 17 comentários

Ou seja, essa chave só é usada para ajudar o desenvolvedor a marcar um determinado tipo de função aqui, apenas passa despacho e histórico, e o código de monitoramento específico requer uma biblioteca de terceiros específica para implementar o monitoramento.

Meu entendimento está correto?

Sim, o formato de chave / valor é usado aqui. No momento, é principalmente para manter o formato consistente com efeitos e redutores. Mais tarde, a função de cancelamento de assinatura será suportada e a chave será usada.

Eu entendo, obrigado.
Mas acho que posso adicionar o significado da discussão acima a esses documentos, você pode encontrar o mesmo problema que eu :)

assinaturas apenas define um local para assinar dados. Em seguida, o despacho e o histórico serão passados. Como se inscrever ou monitorar, será necessária uma biblioteca de classes de terceiros para implementar. Isso é compreensão? Despacho é o despacho na loja de redux, e história é a história no roteador react, está entendido?

@ roc2539 Sim.

Posso acessar o conteúdo do estado ou adereços na configuração em assinaturas?

@gzbigegg Não, acione a ação e deixe o efeito cuidar dela.

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

Há duas perguntas. Não sei se está correto. O documento diz que o olmo nunca entrou em contato com eles e não entendo as assinaturas com muita clareza.

  1. Depois de passar no history e executar o history.listen, ele será acionado quando a rota mudar.Não sei se o entendimento está correto.
  2. Quando serão acionadas as assinaturas que só passam no despacho?

Eu adoraria ver alguns exemplos de assinatura como websocket

Como disptch duas ações na configuração

Não há um documento claro sobre os parâmetros de tempo e injeção do retorno de chamada no registro de assinatura @ roc2539, você pode responder?

Depois de mudar para a rota hash, a instalação não pode monitorar a mudança da entrada de url do teclado.
Mas usar browserHistory é bom.

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

    },

Tentei o soquete, apenas para referência.

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

Tenho tentado descobrir como acionar uma assinatura com uma chave especificada. Originalmente, tudo será executado uma vez quando for inicializado, portanto, esta assinatura fornece apenas um encerramento de despacho e histórico 😄

assinaturas: {
configuração ({expedição}) {
despacho ({type: 'query'})
}
} Esta é apenas a execução inicial de uma ação de despacho; na verdade, não executa uma ação de inscrição.

De repente percebi

Esta página foi útil?
0 / 5 - 0 avaliações