Dva: Wie kann eine Anweisung nach dem Abmelden des Systems alle Daten im Speicher löschen und ein Fehler wird gemeldet, wenn die verschachtelte Route die Seite aktualisiert.

Erstellt am 9. Feb. 2017  ·  3Kommentare  ·  Quelle: dvajs/dva

Während des Betriebs eines Benutzers behält das System die letzten Betriebsdaten der Funktion, aber nach dem Ausloggen meldet sich ein anderer Benutzer an und stellt fest, dass die Daten des vorherigen Benutzers noch vorhanden sind.Wie kann eine Anweisung die Daten in der gesamten Filiale löschen? ?

Es gibt ein weiteres Problem. Mein Systemrouting verwendet Verschachtelung. Besuchen Sie: http://localhost :8000/main/repos. Wenn f5 aktualisiert wird, ist die gesamte Seite zu diesem Zeitpunkt leer. Console: Uncaught SyntaxError: Unexpected token <, index .js:1, und dann kann ich den Quellcode auf der Konsole nicht sehen...

question

Hilfreichster Kommentar

@bjwulin hat dieses Problem gerade gelöst. Gemäß dem, was @sorrycc sehr gesagt hat, verwenden Sie onReducer. Mein Verständnis ist, dass onReducer die globale Aktion und den Zustand abfangen und den neuen Zustand zurückgeben kann. In unserem Beispiel wird bei der Aktion Abmelden der ursprüngliche Zustand zurückgegeben, ist die Aktion nicht Abmelden, wird der empfangene Zustand zurückgegeben.
Die Frage ist nun, wie man den Ausgangszustand erhält. Natürlich können wir den Originalzustand direkt in index.js schreiben. Wenn Sie jedoch bei geschäftlichen Änderungen mehrere Zustände ändern möchten, müssen Sie zu index.js kommen, um auch den entsprechenden Anfangszustand zu ändern, was sehr mühsam ist. So ist es bequemer, direkt aus Modellen zu importieren.
Code-Show wie folgt:

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');

Alle 3 Kommentare

Wie kann eine Anweisung die Daten im gesamten Geschäft löschen?

Aktion abfangen mit

Dann kann ich den Quellcode auf der Konsole nicht sehen...

index.js geändert in /index.js

@bjwulin hat dieses Problem gerade gelöst. Gemäß dem, was @sorrycc sehr gesagt hat, verwenden Sie onReducer. Mein Verständnis ist, dass onReducer die globale Aktion und den Zustand abfangen und den neuen Zustand zurückgeben kann. In unserem Beispiel wird bei der Aktion Abmelden der ursprüngliche Zustand zurückgegeben, ist die Aktion nicht Abmelden, wird der empfangene Zustand zurückgegeben.
Die Frage ist nun, wie man den Ausgangszustand erhält. Natürlich können wir den Originalzustand direkt in index.js schreiben. Wenn Sie jedoch bei geschäftlichen Änderungen mehrere Zustände ändern möchten, müssen Sie zu index.js kommen, um auch den entsprechenden Anfangszustand zu ändern, was sehr mühsam ist. So ist es bequemer, direkt aus Modellen zu importieren.
Code-Show wie folgt:

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 Ich erhalte einen Fehler, wenn ich onReducer verwende. Der Fehler besteht darin, dass der Wert von store nicht gelesen werden kann.Meins ist, das Modell asynchron zu laden, es scheint unmöglich zu sein, auf synchron zu wechseln

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen