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 ...
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
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: