Dva: Une fois le système déconnecté, comment une instruction peut-elle effacer toutes les données du magasin et une erreur est signalée lorsque la route imbriquée actualise la page.

Créé le 9 févr. 2017  ·  3Commentaires  ·  Source: dvajs/dva

Pendant l'opération d'un utilisateur, le système conserve les dernières données d'opération de la fonction, mais après s'être déconnecté, un autre utilisateur se connecte et constate que les données de l'utilisateur précédent existent toujours. Comment une instruction peut-elle effacer les données dans l'ensemble du magasin ?

Il y a un autre problème. Mon routage système utilise l'imbrication. Visitez : http://localhost :8000/main/repos. À ce stade, lorsque f5 est actualisé, la page entière est vide. Console : Uncaught SyntaxError : Unexpected token <, index .js:1, puis je ne vois pas le code source sur la console...

question

Commentaire le plus utile

@bjwulin vient de résoudre ce problème. Selon ce que @sorrycc a beaucoup dit, utilisez onReducer. D'après ce que j'ai compris, onReducer peut intercepter l'action et l'état globaux et renvoyer le nouvel état. Dans notre exemple, si l'action est déconnexion, l'état d'origine sera retourné. Si l'action n'est pas déconnexion, alors l'état reçu sera retourné.
La question est maintenant de savoir comment obtenir l'état initial. Bien sûr, nous pouvons écrire l'état d'origine directement dans index.js. Cependant, avec les changements métiers, si vous souhaitez modifier plusieurs états, il faut venir sur index.js pour changer également l'état initial correspondant, ce qui est très gênant. Il est donc plus pratique d'importer directement à partir de modèles.
afficher le code comme ci-dessous:

const models=[];
models.push(require('./models/exhibit'));
models.push(require('./models/user'));
const initialState={};
models.forEach((m)=>initialState[m.namespace]=m.state);
const undo = r => (state, action) => {
  const newState = r(state, action);
  if (action.type == 'user/logoutOnlyStatus') {
    return {
      routing: newState.routing,
      ...initialState
    }
  }
  else {
    return newState
  }
};
const app=dva({
  onError(e){
    console.log(e)
  },
  onReducer: undo
});
app.model(require('./models/exhibit'));
app.model(require('./models/user'));
app.router(require('./router'));
app.start('#root');

Tous les 3 commentaires

Comment une déclaration peut-elle effacer les données dans l'ensemble du magasin ?

Intercepter l'action avec onReducer

Ensuite, je ne peux pas voir le code source sur la console...

index.js changé en /index.js

@bjwulin vient de résoudre ce problème. Selon ce que @sorrycc a beaucoup dit, utilisez onReducer. D'après ce que j'ai compris, onReducer peut intercepter l'action et l'état globaux et renvoyer le nouvel état. Dans notre exemple, si l'action est déconnexion, l'état d'origine sera retourné. Si l'action n'est pas déconnexion, alors l'état reçu sera retourné.
La question est maintenant de savoir comment obtenir l'état initial. Bien sûr, nous pouvons écrire l'état d'origine directement dans index.js. Cependant, avec les changements métiers, si vous souhaitez modifier plusieurs états, il faut venir sur index.js pour changer également l'état initial correspondant, ce qui est très gênant. Il est donc plus pratique d'importer directement à partir de modèles.
afficher le code comme ci-dessous:

const models=[];
models.push(require('./models/exhibit'));
models.push(require('./models/user'));
const initialState={};
models.forEach((m)=>initialState[m.namespace]=m.state);
const undo = r => (state, action) => {
  const newState = r(state, action);
  if (action.type == 'user/logoutOnlyStatus') {
    return {
      routing: newState.routing,
      ...initialState
    }
  }
  else {
    return newState
  }
};
const app=dva({
  onError(e){
    console.log(e)
  },
  onReducer: undo
});
app.model(require('./models/exhibit'));
app.model(require('./models/user'));
app.router(require('./router'));
app.start('#root');

@zhangdistephen J'obtiens une erreur lorsque j'utilise onReducer. L'erreur est que la valeur de store ne peut pas être lue.Le mien est de charger le modèle de manière asynchrone, il semble impossible de passer en synchrone

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