反応フラックス アーキテクチャには、401 エラーをログイン ページにリダイレクトできる Angular のインターセプターに似たものがありますか?
1 に答える
具体的にはありませんが、ajax リクエスト エラー コールバックで処理できます。401 応答を確認し、ログイン コンポーネント/リダイレクトをレンダリングしてログインします。facebook のフラックス実装では、通常、アクション内に ajax 呼び出しを保持しています。成功のコールバックは、ディスパッチャーを呼び出します。私はreact-routerを使用しているので、ログインに行くだけです:
var MyActions = {
doSomething: function () {
$.post('/projects/new', {
}).done(function (res) {
AppDispatcher.handleViewAction({
actionType: ProjectConstants.PROJECT_CREATE,
data: res
});
}).fail(function (res) {
AppDispatcher.handleViewAction({
actionType: ProjectConstants.UNAUTHORIZED
});
});
}
};
ストアでは、不正な応答を処理します。
var _unAuth = false;
var MyStore = {
getUnauthorized() {
return _unAuth;
},
setUnauthorized(val) {
_unAuth = val;
}
}
AppDispatcher.register(function(payload) {
var action = payload.action;
if (action.actionType === ProjectConstants.UNAUTHORIZED) {
ProjectStore.setUnauthorized(true);
}
});
次に、react ルーター スコープがあるため、コンポーネントでリダイレクトを呼び出します。
class MyComponent extends Component {
_onChange() {
if (ProjectStore.getUnauthorized()) {
this.transitionTo('/login');
}
}
}
ただし、通常のページ リダイレクトを実行する場合は、window.location.href = '/login'; を呼び出すことができます。アクションの中に。
ログイン状態を別のストアに置くことで、もう少し抽象化できます。これは私が自分のアプリで行ったことです。私はそれをシンプルに保ち、クラスとシングルトンの数を減らしようとしていました。
編集すべての ajax リクエストを処理するには:
私のajaxライブラリのラッパーを書くだけです:
var ajax = {
send: function (url, data, success, fail) {
$.post(url, data).done(success).fail((jqXHR, textStatus, errorThrown) => {
if (jqXHR.status === 401) {
location.href = '/login';
}
else {
fail(jqXHR, textStatus, errorThrown);
}
});
}
}
ajax ライブラリの代わりにそれを直接呼び出します。
私が試したことはありませんがthis
、アクション呼び出しを介してコンポーネントを関数に渡す可能性があります。transitionTo
それを使用して、私には不潔に感じるようなことを呼び出します。