私は React/Flux で遊んでいますが、許可に敏感なアクションを処理するための「Flux Way」に頭を悩ませています。
包括的な質問: ログインしていない訪問者がログインを必要とするアクションを試みた場合、(a) ユーザーがログインしているかどうかを確認する、(b) ログインフローを開始する、(c) の Flux の方法は何ですか? ) 成功したらアクションを終了しますか?
ユーザーが投稿するためにログインする必要があるフォーラム アプリの例を見てみましょう。
コメント フォーム コンポーネント (ほとんどは FB の React tut から取得) があります。
var CommentForm = React.createClass({
handleSubmit: function ( e ) {
e.preventDefault();
// get data
commentData = {
content: this.refs.content.getDOMNode().value.trim()
};
this.props.onCommentSubmit( commentData );
this.resetForm();
},
resetForm: function () {
this.refs.content.getDOMNode().value = '';
},
render: function () {
return (
<form className="comment-form" id="comment-form" onSubmit={ this.handleSubmit }>
<textarea name="comment[content]" placeholder="What's on your mind?" ref="content"></textarea>
<button className="post-comment button" type="submit">Post</button>
</form>
)
}
});
コメント ストア (省略形)
var CHANGE_EVENT = 'change';
var _comments = {};
function createComment ( data ) {
// post to server
}
var CommentStore = React.addons.update(EventEmitter.prototype, {$merge: {
// omitted methods
dispatcherIndex: AppDispatcher.register(function(payload) {
var action = payload.action;
var text;
switch(action.actionType) {
case CommentConstants.ADD_COMMENT:
AppDispatcher.waitFor([SessionStore.dispatchToken])
createComment(action.data);
break;
}
return true;
})
}});
そして、セッションを処理するためのストア (省略形も):
var CHANGE_EVENT = 'change';
function ensureCurrentUser () {
if ( !SessionStore.currentUser() ) {
app.router.navigate('/login');
}
}
var SessionStore = React.addons.update(EventEmitter.prototype, {$merge: {
// omitted code
currentUser: function () {
return app.context.current_user;
},
dispatchToken: AppDispatcher.register(function ( payload ) {
var action = payload.action;
switch(action.actionType) {
case CommentConstants.ADD_COMMENT:
ensureCurrentUser();
break;
}
return true;
})
}});
私の最初の考えは、これは Flux のwaitFor()
方法のケースであるということでした。ただし、上記の実装は、設定されるとすぐに (戻るとすぐに)waitFor
依存ループを閉じるため、失敗します。SessionStore.dispatchToken
ensureCurrentUser
これは、ペイロードを に渡しensureCurrentUser
、次に のルート ハンドラに渡す必要があるケース/login
ですか? これらのタイプのフローを処理する Flux の方法は何ですか?
前もって感謝します :)