Dva: aviso irritante: Aviso: dispatch: ns / ACTION_TYPE não deve ser prefixado com namespace ns

Criado em 18 jun. 2017  ·  11Comentários  ·  Fonte: dvajs/dva

É possível desligar os avisos "úteis" recebidos ao usar a função "despacho" nos registros ou efeito "colocar"?
Ou pelo menos torne-os opcionais.

Eu mantenho meus criadores de ações e tipos de ações em arquivos dedicados, o que eu acredito ser uma prática recomendada geral para redux (veja por exemplo aqui )

Isso significa que eu sempre uso meus criadores de ação em efeitos dva, registros e componentes.

Exemplo:
actionTypes.js:

export const TOKEN_RESTORED = 'auth/TOKEN_RESTORED';

actions.js:

export default {
    tokenRestored: payload => ({type: TOKEN_RESTORED, payload: payload.token})
};

model.js:

app.model({
    namespace: ...,
    state: { ... },
    effects: { ... },

    subscriptions: {
        setup({dispatch}) {
            let token = localStorage.token;
            if (token) {
                dispatch(actions.tokenRestored({token}));
            }
        }
    }
});

Acredito que os usuários devam ser capazes de escrever códigos como este, sem receber dezenas de avisos do tipo:

Warning: dispatch: auth/tokenRestored should not be prefixed with namespace auth

O estilo do código é uma forma de preferência pessoal e o dva atualmente pune os usuários que não usam strings diretamente para os tipos de ação.

Comentários muito úteis

Estou um pouco atrasado para a festa aqui, mas este é um hack que usei para contornar o erro. Definitivamente não é uma boa solução, mas pelo menos sufoca a saída de erro.

`` `// my-model.js
console.error = mensagem => {
if (message.indexOf ("prefixNamespace") === -1) {
console.log (mensagem);
}
};

Todos 11 comentários

Acabei de experimentar o mesmo problema.
Gerenciar ações por redux-actions é conveniente.
No entanto, isso não pode ser usado nos modelos por causa do aviso.

Criei uma solicitação pull caso isso ajude a chamar a atenção desse problema.

1013

Recomende o uso de https://www.npmjs.com/package/babel-plugin-dev-expression para remover invariante e aviso para produção.

E o ambiente de desenvolvimento?
E se eu não puder usar os plug-ins do Babel porque estou usando o app create react?

Por que devo receber avisos por usar uma técnica comum?

Em 19 de julho de 2017 06:25, "chencheng (云 谦)" [email protected] escreveu:

Recomende usar https://www.npmjs.com/package/babel-plugin-dev-expression
para retirar invariante e aviso para produção.

-
Você está recebendo isto porque é o autor do tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/dvajs/dva/issues/988#issuecomment-316261873 ou mudo
o segmento
https://github.com/notifications/unsubscribe-auth/ABJVKPRJMf0P0qVcTgOm-UH4q9RCNpg4ks5sPXcTgaJpZM4N9hlv
.

@orzarchi acredito que @sorrycc esteja extremamente ocupada e focada em questões abertas apenas para poder manter este projeto. Então você tem que criar um novo problema para chamar a atenção dele.

BTW, você conseguiu contornar esses avisos?

Eu tive um problema diferente. Meu modelo coloca uma ação que é usada apenas por outros modelos:

// realtime.js
yield put({ type: 'message', payload: { message } });

e outros modelos ouvem mensagens em tempo real:

// someModel.js
const message = yield take('realtime/message');

Como o modelo realtime não faz nada com message si, ele não tem um efeito message definido. Por causa disso yield put({ type: 'message', payload: { message } }) não foi prefixado pelos algoritmos internos dvajs e realtime/message nunca foi disparado.
E se eu prefixar manualmente:

// realtime.js
yield put({ type: 'realtime/message', payload: { message } });

ele lança avisos sobre o namespace ('... não deve ser prefixado com namespace ...')

Para contornar o problema, adicionei um efeito fictício ao modelo:

// realtime.js
'effects': {
  // dvajs requires effect to be defined to auto-prefix it with namespace
  // if add prefix manually then dvajs throws annoying warnings
  // https://github.com/dvajs/dva/issues/988
  message: () => { },
}

Agora não tenho avisos e outros modelos recebem realtime/message ação.

Não vejo por que abrir a edição novamente mudará sua opinião.
Sua solução parece boa, mas o esforço extra não vale a pena quando você tem centenas de ações.
Além disso, é prática comum usar constantes para tipos de ação (ou funções de criador de ação) e, como tal, sempre despacho com o prefixo.
Ainda não encontrei uma solução alternativa, então estou pensando em bifurcar o dva para meu projeto atual e nunca mais usá-lo novamente.

Estou um pouco atrasado para a festa aqui, mas este é um hack que usei para contornar o erro. Definitivamente não é uma boa solução, mas pelo menos sufoca a saída de erro.

`` `// my-model.js
console.error = mensagem => {
if (message.indexOf ("prefixNamespace") === -1) {
console.log (mensagem);
}
};

Estou um pouco atrasado para a festa aqui, mas este é um hack que usei para contornar o erro. Definitivamente não é uma boa solução, mas pelo menos sufoca a saída de erro.

console.error = message => {
  if (message.indexOf("prefixNamespace") === -1) {
    console.log(message);
  }
};

Você pode esclarecer seu código? onde você colocou o código?

Você pode colocá-lo em src / app.tsx. E se você quiser manter console.error em vez de converter todos console.error em console.log, você pode tentar este código

const errorLog = console.error;
  console.error = (...rest) => {
    if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) {
      errorLog.call(console, ...rest);
    }
  };

Você pode colocá-lo em src / app.tsx. E se você quiser manter console.error em vez de converter todos console.error em console.log, você pode tentar este código

const errorLog = console.error;
  console.error = (...rest) => {
    if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) {
      errorLog.call(console, ...rest);
    }
  };

Obrigado, e descobri que posso colocar em qualquer lugar do aplicativo :))

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