Dva: Depois que o sistema efetua logout, como uma instrução pode limpar todos os dados no armazenamento e um erro é relatado quando a rota aninhada atualiza a página.

Criado em 9 fev. 2017  ·  3Comentários  ·  Fonte: dvajs/dva

Durante a operação de um usuário, o sistema retém os dados da última operação da função, mas após o logout, outro usuário efetua login e descobre que os dados do usuário anterior ainda existem. Como uma instrução pode limpar os dados em toda a loja ?

Há outro problema. O roteamento do meu sistema usa aninhamento. Visite: http: // localhost : 8000 / main / repos. Nesse momento, quando f5 é atualizado, a página inteira fica em branco. Console: SyntaxError não capturado: token inesperado <, índice .js: 1, e então não consigo ver o código-fonte no console ...

question

Comentários muito úteis

@bjwulin acabou de resolver esse problema. De acordo com o que @sorrycc disse muito, use onReducer. Meu entendimento é que onReducer pode interceptar a ação global e o estado e retornar o novo estado. Em nosso exemplo, se a ação for logout, o estado original será retornado.Se a ação não for logout, o estado recebido será retornado.
A questão agora é como obter o estado inicial. Claro, podemos escrever o estado original diretamente em index.js. No entanto, com mudanças de negócios, se você quiser modificar vários estados, você deve ir ao index.js para alterar também o estado inicial correspondente, o que é muito problemático. Portanto, é mais conveniente importar diretamente dos modelos.
código mostrado abaixo:

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

Todos 3 comentários

Como uma declaração pode limpar os dados de toda a loja?

Interceptar ação com onReducer

Então não consigo ver o código-fonte no console ...

index.js alterado para /index.js

@bjwulin acabou de resolver esse problema. De acordo com o que @sorrycc disse muito, use onReducer. Meu entendimento é que onReducer pode interceptar a ação global e o estado e retornar o novo estado. Em nosso exemplo, se a ação for logout, o estado original será retornado.Se a ação não for logout, o estado recebido será retornado.
A questão agora é como obter o estado inicial. Claro, podemos escrever o estado original diretamente em index.js. No entanto, com mudanças de negócios, se você quiser modificar vários estados, você deve ir ao index.js para alterar também o estado inicial correspondente, o que é muito problemático. Portanto, é mais conveniente importar diretamente dos modelos.
código mostrado abaixo:

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 Recebo um erro quando uso o onReducer. O erro é que o valor da loja não pode ser lido.O meu é carregar o modelo de forma assíncrona, parece impossível mudar para síncrono

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

Questões relacionadas

sorrycc picture sorrycc  ·  3Comentários

huyawei picture huyawei  ·  3Comentários

hanxiansen picture hanxiansen  ·  3Comentários

not3 picture not3  ·  3Comentários

itiwll picture itiwll  ·  4Comentários