2015-10-13 9 views
7

मैं बाहरी स्थिति के आधार पर एक घटक प्रस्तुत करना चाहता हूं, अन्यथा ऐप में कहीं और रीडायरेक्ट करना चाहता हूं।एक प्रतिक्रिया घटक में रीडायरेक्ट करने के लिए उपयुक्त जीवन चक्र चरण क्या है?

आदर्श रूप से यह पुनर्निर्देशन घटक से पहले तय किया जाएगा, लेकिन कुछ मामलों में मुझे लगता है कि मुझे घटक में ऐसा करने की आवश्यकता है। उदाहरण के लिए, ReactRouter में, रूटर इस प्रकार दिखाई देंगे:

<Router> 
    <Route path='/' component={LoadingPage} /> 
    <Route path='/Home' component={HomePage} /> 
    <Route path='/Login' component={LoginPage} /> 
</Router> 

और LoadingPage के लिए तर्क/sudocode कुछ इस तरह जाना होगा:,

if (stillLoading) { 
    render 
} else if (loggedIn) { 
    redirectToHome 
} else { 
    redirectToLogin 
} 

यह जटिल हो जाता है क्योंकि कभी-कभी अनुप्रयोग है घटक से पहले ही लोड हो चुका है।

इस पुनर्निर्देशन तर्क को रखने के लिए कौन सा जीवन चक्र चरण सबसे उपयुक्त स्थान है?

  • रेंडर से रेंडर/विधि कहा जाता है? (अजीब लगता है)
  • घटक DidMount + बाद में एक ईवेंट श्रोता बनाएं?
  • GetInitialState? (लेकिन साइड इफेक्ट्स नहीं होना चाहिए?)
  • घटक WillMount?
  • अन्य?
+1

रिएक्ट राउटर दस्तावेज़ों में 'ऑन एंटर' देखें, और रेपो – knowbody

+0

@knowbody में ऑथ-फ्लो उदाहरण - कमाल! यही वही है जो मैं ढूंढ रहा हूं। तो जवाब वास्तव में शून्य था - घटक से पहले पुनर्निर्देशन भी शुरू किया गया है – eedrah

उत्तर

5

मेरे पास एक समान ऐप है, और मैं प्रवाह पैटर्न लागू करता हूं। मैं लॉगिन स्थिति को सहेजने के लिए loginStore बनाता हूं, और अन्य पेज इसे देखते हैं। स्टोर स्टोर को देखने के लिए मैं higher order component का उपयोग करता हूं, इसलिए लोडिंग स्थिति props के माध्यम से अन्य घटकों में गुजरती है। फिर मैं componentWillReceiveProps में पेज संक्रमण करता हूं।

यदि आप प्रवाह पैटर्न लागू नहीं करते हैं, तो मुझे लगता है कि आपको निर्णय लेना होगा कि पहले बाहरी स्थिति को कैसे जानना है। उदाहरण के लिए, componentWillReceiveProps में तर्क दें यदि बाहरी स्थिति props से आती है।

प्रस्तुत करने में पुनर्निर्देशन तर्क न डालें जो pure होना चाहिए। हर बार जब आप render विधि का आह्वान करते हैं, तो यह केवल आपके पृष्ठ को बदलने के बजाय आपके DOM का विवरण देता है।

ComponentWillMount भी काम नहीं करता है। इसे केवल एक बार बुलाया जाता है और आपको लॉगिन करने से पहले बुलाया जा सकता है। GetInitialState में भी यह समस्या है, और यह केवल आपके घटक की प्रारंभिक स्थिति प्रदान करनी चाहिए।

+0

यदि मेरे प्रोक्स मेरे रेडक्स राज्य से आ रहे हैं तो आप क्या सुझाव देते हैं? और मैं यह जांचना चाहता हूं कि 'this.props.match.params.lockId' के पास 'lock._id' संबंधित है या नहीं। यदि नहीं, तो मैं वापस '/' पर रीडायरेक्ट करना चाहता हूं। –

संबंधित मुद्दे