Dva: システムがログアウトした後、1つのステートメントでストア内のすべてのデータをクリアするにはどうすればよいですか。ネストされたルートがページを更新すると、エラーが報告されます。

作成日 2017年02月09日  ·  3コメント  ·  ソース: dvajs/dva

ユーザーの操作中、システムは関数の最後の操作データを保持しますが、ログアウトした後、別のユーザーがログインし、前のユーザーのデータがまだ存在していることを確認します。1つのステートメントでストア全体のデータをクリアするにはどうすればよいですか。 ?

別の問題があります。システムルーティングでネストが使用されています。アクセス: http:// localhost :8000 / main / repos。この時点で、f5が更新されると、ページ全体が空白になります。コンソール:Uncaught SyntaxError:Unexpected token <、index .js:1とすると、コンソールにソースコードが表示されません...

question

最も参考になるコメント

@bjwulinはこの問題を解決しました。 @sorryccが大いに言った、onReducerを使用してください。私の理解では、onReducerはグローバルなアクションと状態をインターセプトし、新しい状態を返すことができます。この例では、アクションがログアウトの場合、元の状態が返されます。アクションがログアウトでない場合、受信した状態が返されます。
ここで問題となるのは、初期状態を取得する方法です。もちろん、元の状態をindex.jsに直接書き込むこともできます。ただし、ビジネスの変更により、複数の状態を変更する場合は、index.jsにアクセスして、対応する初期状態も変更する必要があります。これは非常に面倒です。したがって、モデルから直接インポートする方が便利です。
コードは次のように表示されます。

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

全てのコメント3件

1つのステートメントでストア全体のデータをクリアするにはどうすればよいですか?

onReducerによるインターセプトアクション

その後、コンソールにソースコードが表示されません...

index.js/index.js変更されました

@bjwulinはこの問題を解決しました。 @sorryccが大いに言った、onReducerを使用してください。私の理解では、onReducerはグローバルなアクションと状態をインターセプトし、新しい状態を返すことができます。この例では、アクションがログアウトの場合、元の状態が返されます。アクションがログアウトでない場合、受信した状態が返されます。
ここで問題となるのは、初期状態を取得する方法です。もちろん、元の状態をindex.jsに直接書き込むこともできます。ただし、ビジネスの変更により、複数の状態を変更する場合は、index.jsにアクセスして、対応する初期状態も変更する必要があります。これは非常に面倒です。したがって、モデルから直接インポートする方が便利です。
コードは次のように表示されます。

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

@zhangdistephenonReducerを使用するとエラーが発生します。エラーは、storeの値を読み取ることができないことです。私はモデルを非同期でロードすることです、同期に変更することは不可能のようです

このページは役に立ちましたか?
0 / 5 - 0 評価