Dva: avertissement gênant : Avertissement : dispatch : ns/ACTION_TYPE ne doit pas être préfixé par l'espace de noms ns

Créé le 18 juin 2017  ·  11Commentaires  ·  Source: dvajs/dva

Est-il possible de désactiver les avertissements "utiles" reçus lors de l'utilisation de la fonction "dispatch" dans les inscriptions ou l'effet "put" ?
Ou au moins les rendre facultatifs.

Je conserve mes créateurs d'actions et mes types d'actions dans des fichiers dédiés, ce qui, à mon avis, est une bonne pratique générale pour le redux (voir par exemple ici )

Cela signifie que j'utilise toujours mes créateurs d'action dans les effets dva, les enregistrements et les composants.

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

Je pense que les utilisateurs devraient pouvoir écrire du code comme celui-ci, sans recevoir des dizaines d'avertissements du type :

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

Le style de code est une manière de préférence personnelle, et dva punit actuellement les utilisateurs qui n'utilisent pas directement de chaînes pour les types d'action.

Commentaire le plus utile

Je suis un peu en retard pour la fête ici, mais c'est un hack que j'ai utilisé pour contourner l'erreur. Ce n'est certainement pas une bonne solution mais cela étouffe au moins la sortie d'erreur.

```// mon-modèle.js
console.error = message => {
if (message.indexOf("prefixNamespace") === -1) {
console.log(message);
}
} ;

Tous les 11 commentaires

Je viens de vivre le même problème.
La gestion des actions par redux-actions est pratique.
Cependant, cela ne peut pas être utilisé dans les modèles en raison de l'avertissement.

J'ai créé une pull request au cas où cela aiderait à attirer l'attention sur ce problème.

1013

Nous vous recommandons d'utiliser https://www.npmjs.com/package/babel-plugin-dev-expression pour supprimer l'invariant et l'avertissement pour la production.

Qu'en est-il de l'environnement de développement ?
Que faire si je ne peux pas utiliser les plugins Babel parce que j'utilise l'application create react ?

Pourquoi devrais-je recevoir des avertissements pour l'utilisation d'une technique courante ?

Le 19 juillet 2017 06:25, "chencheng (云谦)" [email protected] a écrit :

Recommander en utilisant https://www.npmjs.com/package/babel-plugin-dev-expression
pour dépouiller l'invariant et l'avertissement pour la production.

-
Vous recevez ceci parce que vous avez créé le fil.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/dvajs/dva/issues/988#issuecomment-316261873 , ou couper le son
le fil
https://github.com/notifications/unsubscribe-auth/ABJVKPRJMf0P0qVcTgOm-UH4q9RCNpg4ks5sPXcTgaJpZM4N9hlv
.

@orzarchi Je crois que @sorrycc est extrêmement occupé et concentré sur les problèmes ouverts uniquement pour pouvoir maintenir ce projet. Vous devez donc créer un nouveau problème afin d'attirer son attention.

BTW, avez-vous réussi à contourner ces avertissements ?

J'ai eu un problème différent. Mon modèle met une action qui n'est utilisée que par d'autres modèles :

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

et d'autres modèles écoutent les messages en temps réel :

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

Puisque le modèle realtime ne fait rien avec message lui-même, il n'a pas d'effet message défini. À cause de cela, yield put({ type: 'message', payload: { message } }) n'a pas été préfixé par les algorithmes internes de dvajs et realtime/message n'a jamais été déclenché.
Et si je préfixe manuellement :

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

il lance des avertissements sur l'espace de noms ('... ne doit pas être préfixé avec l'espace de noms ...')

Pour contourner le problème, j'ai ajouté un effet factice dans le modèle :

// 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: () => { },
}

Maintenant, je n'ai aucun avertissement et les autres modèles reçoivent une action realtime/message .

Je ne vois pas pourquoi rouvrir le sujet changera son opinion.
Votre solution semble correcte, mais l'effort supplémentaire n'en vaut pas la peine lorsque vous avez des centaines d'actions.
Il est également courant d'utiliser des constantes pour les types d'action (ou les fonctions de création d'action), et en tant que tel, je distribue toujours avec le préfixe.
Je n'ai pas encore trouvé de solution de contournement, j'envisage donc de forger dva pour mon projet actuel, puis de ne plus jamais l'utiliser.

Je suis un peu en retard pour la fête ici, mais c'est un hack que j'ai utilisé pour contourner l'erreur. Ce n'est certainement pas une bonne solution mais cela étouffe au moins la sortie d'erreur.

```// mon-modèle.js
console.error = message => {
if (message.indexOf("prefixNamespace") === -1) {
console.log(message);
}
} ;

Je suis un peu en retard pour la fête ici, mais c'est un hack que j'ai utilisé pour contourner l'erreur. Ce n'est certainement pas une bonne solution mais cela étouffe au moins la sortie d'erreur.

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

Peux-tu clarifier ton code ? où as-tu mis le code ?

Vous pouvez le mettre dans src/app.tsx. Et si vous voulez conserver console.error au lieu de convertir tout console.error en console.log, vous pouvez essayer ce code

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

Vous pouvez le mettre dans src/app.tsx. Et si vous voulez conserver console.error au lieu de convertir tout console.error en console.log, vous pouvez essayer ce code

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

Merci, et j'ai trouvé que je peux mettre n'importe où dans l'application, :))

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