É 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.
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.
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 :))
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);
}
};