मैं रिएक्ट/फ्लक्स के साथ खेल रहा हूं, और मुझे अनुमति-संवेदनशील कार्यों को संभालने के लिए 'फ्लक्स वे' के चारों ओर अपने सिर को लपेटने में परेशानी हो रही है।लॉगिन प्रवाह के साथ अनुमति संवेदनशील क्रियाओं को संभालने के लिए प्रतिक्रिया/प्रवाह मार्ग
प्रश्न पूछना: जब कोई गैर-लॉग इन विज़िटर उस क्रिया को स्वीकार करता है जिसके लिए उसे लॉग इन करने की आवश्यकता होती है, तो फ्लक्स का तरीका क्या है (ए) उपयोगकर्ता लॉग इन होने पर जांच कर रहा है, (बी) शुरू करना लॉगिन प्रवाह, (सी) सफलता पर कार्रवाई खत्म?
एक मंच अनुप्रयोग, है कि उपयोगकर्ताओं को आवश्यकता का एक उदाहरण ले लो पोस्ट करने के लिए लॉग इन करना:
हम एक टिप्पणी प्रपत्र घटक है जैसे (ज्यादातर अमेरिकन प्लान के से लिया टुट प्रतिक्रिया):
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;
})
}});
मेरा प्रारंभिक विचार यह था कि यह फ्लक्स की waitFor()
विधि का मामला है। हालांकि, उपरोक्त कार्यान्वयन विफल रहता है, क्योंकि waitFor
SessionStore.dispatchToken
सेट होने पर निर्भरता पाश को बंद कर देता है (जैसे ही ensureCurrentUser
रिटर्न)।
क्या यह मामला है जहां पेलोड ensureCurrentUser
में और फिर /login
के लिए रूट हैंडलर में पारित किया जाना चाहिए? इन प्रकार के प्रवाहों को संभालने का प्रवाह तरीका क्या है?
अग्रिम में :)
प्रश्न में कोड के साथ बस कुछ अन्य, असंबंधित मुद्दे: डीओएम में राज्य को रखना प्रतिक्रिया में एक कोड गंध है। यह पंक्ति: 'this.refs.content.getDOMNode()। Value.trim()' को 'this.state.content' द्वारा प्रतिस्थापित किया जाना चाहिए - आपको 'टेक्स्ट' में टेक्स्टरेरा की स्थिति को बनाए रखना चाहिए। state'। यह भी ध्यान दें कि सत्र सामग्री के साथ स्थिरता के लिए आपकी सामग्रीस्टोर की 'प्रेषक इंडेक्स' का नाम बदलकर 'प्रेषण टोकन 'रखा जाना चाहिए। – fisherwebdev
अतिरिक्त युक्तियों के लिए धन्यवाद! 'This.refs.content.getDOMNode()। Value.trim()' वास्तव में सीधे [फेसबुक के रिएक्ट ट्यूटोरियल] (http://facebook.github.io/react/docs/tutorial.html) से लिया गया था, जहां यह 'टिप्पणीफॉर्म' घटक में प्रयोग किया जाता है। जब भी उपयोगकर्ता टिप्पणी सामग्री बदलता है, और फिर बस सबमिट करने पर राज्य से खींच रहा हूं, तो क्या मुझे राज्य को अद्यतन करना चाहिए? – mattmattmatt
हम्म, मेरी इच्छा है कि प्रतिक्रिया साइट पर वहां नहीं था, क्योंकि यह इस पृष्ठ के विपरीत है: http://facebook.github.io/react/docs/forms.html - यह मेरे काम के करीब है इनपुट के साथ, जहां मैं स्थानीय घटक के 'this.state' में मान बनाए रखता हूं। एक अधिक पूर्ण उदाहरण के लिए फ्लक्स-टोडोएमवीसी ऐप भी देखें। – fisherwebdev