स्वीकृत उत्तर और इस प्रश्न की सामान्य प्रकृति ('काम नहीं करते') पर टिप्पणियों को देखते हुए, मैंने सोचा कि यह यहां शामिल मुद्दों के बारे में कुछ सामान्य स्पष्टीकरण के लिए एक अच्छी जगह हो सकती है। तो यह जवाब ओपी के विशिष्ट उपयोग के मामले में पृष्ठभूमि की जानकारी / विस्तार के रूप में है। कृपया मेरा साथ दें।
सर्वर-साइड बनाम क्लाइंट-साइड
इसके बारे में समझने वाली पहली बड़ी बात यह है कि अब ऐसे 2 स्थान हैं जहाँ URL की व्याख्या की जाती है, जबकि 'पुराने दिनों' में केवल 1 ही हुआ करता था। अतीत में, जब जीवन सरल था, तो कुछ उपयोगकर्ता http://example.com/about
सर्वर के लिए एक अनुरोध भेजते थे , जो URL के पथ भाग का निरीक्षण करता था, निर्धारित करता था कि उपयोगकर्ता उस पृष्ठ के बारे में अनुरोध कर रहा था और फिर उस पृष्ठ को वापस भेज दिया।
क्लाइंट-साइड रूटिंग के साथ, जो कि रिएक्ट-राउटर प्रदान करता है, चीजें कम सरल हैं। सबसे पहले, ग्राहक के पास कोई जेएस कोड अभी तक लोड नहीं है। इसलिए पहले अनुरोध हमेशा सर्वर पर रहेगा। इसके बाद एक पेज वापस आएगा जिसमें रिएक्ट और रिएक्ट राउटर आदि लोड करने के लिए आवश्यक स्क्रिप्ट टैग शामिल हैं, केवल जब उन लिपियों को लोड किया जाता है तो चरण 2 शुरू होता है। चरण 2, जब 'हमारे बारे में' उदाहरण के लिए नेविगेशन लिंक पर क्लिक करता है, URL परिवर्तित किया जाता है केवल स्थानीय रूप से करने के लिए http://example.com/about
(द्वारा ही संभव बनाया इतिहास एपीआई ), लेकिन सर्वर से कोई अनुरोध किया जाता है। इसके बजाय, रिएक्ट राउटर क्लाइंट पक्ष पर अपनी बात करता है, यह निर्धारित करता है कि कौन सा रिएक्ट इसे रेंडर और रेंडर करता है। अपने पृष्ठ के बारे में मानकर किसी भी REST कॉल करने की आवश्यकता नहीं है, यह पहले से ही किया गया है। आपने किसी भी सर्वर अनुरोध के बिना घर से हमारे बारे में संक्रमण किया है।
इसलिए मूल रूप से जब आप एक लिंक पर क्लिक करते हैं, तो कुछ जावास्क्रिप्ट रन करता है जो एड्रेस बार में URL को हेरफेर करता है, बिना पेज रिफ्रेश किए , जिसके कारण क्लाइंट पक्ष पर पेज ट्रांजिशन करने के लिए रिएक्ट राउटर होता है ।
लेकिन अब विचार करें कि क्या होगा यदि आप एड्रेस बार में URL को कॉपी-पेस्ट करते हैं और इसे किसी मित्र को ई-मेल करते हैं। आपके मित्र ने अभी तक आपकी वेबसाइट लोड नहीं की है। दूसरे शब्दों में, वह अभी भी चरण 1 में है । अभी तक उसकी मशीन पर कोई रिएक्ट राउटर नहीं चल रहा है। तो उसका ब्राउज़र एक सर्वर अनुरोध करेगा http://example.com/about
।
और यहीं से आपकी परेशानी शुरू होती है। अब तक, आप अपने सर्वर के वेबरोट पर केवल एक स्थिर HTML रखने के साथ दूर हो सकते हैं। लेकिन वह सर्वर से अनुरोध404
करने पर अन्य सभी URL के लिए त्रुटियां देगा । वही URL क्लाइंट साइड पर ठीक काम करते हैं , क्योंकि वहां रिएक्ट राउटर आपके लिए राउटिंग कर रहा होता है, लेकिन वे सर्वर साइड में फेल हो जाते हैं, जब तक कि आप अपना सर्वर उन्हें समझ नहीं लेते।
सर्वर- और क्लाइंट-साइड रूटिंग का मेल
यदि आप चाहते हैं कि http://example.com/about
URL सर्वर और क्लाइंट-साइड दोनों पर काम करे, तो आपको सर्वर और क्लाइंट साइड दोनों पर इसके लिए रूट सेट करना होगा। सही समझ में आता है?
और यहीं से आपकी पसंद शुरू होती है। समाधान समस्या को पूरी तरह से दरकिनार करने से होता है, एक कैच-ऑल मार्ग के माध्यम से जो बूटस्ट्रैप एचटीएमएल को लौटाता है, फुल-ऑन आइसोमॉर्फिक दृष्टिकोण पर जहां सर्वर और क्लाइंट दोनों एक ही जेएस कोड चलाते हैं।
।
समस्या को पूरी तरह से दरकिनार करते हुए: हैश हिस्ट्री
ब्राउज़र इतिहास के बजाय हैश इतिहास के साथ , पृष्ठ के बारे में आपका URL कुछ इस तरह दिखाई देगा:
हैश ( ) प्रतीक के बाद का हिस्सा सर्वर को नहीं भेजा जाता है। इसलिए सर्वर केवल उम्मीद के अनुसार इंडेक्स पेज देखता है और भेजता है। रिएक्ट-राउटर भाग को उठाएगा और सही पृष्ठ दिखाएगा।http://example.com/#/about
#
http://example.com/
#/about
डाउनसाइड्स :
- 'बदसूरत' यूआरएल
- इस दृष्टिकोण के साथ सर्वर-साइड प्रतिपादन संभव नहीं है। जहाँ तक Search Engine Optimization (SEO) का सवाल है, आपकी वेबसाइट में एक पेज होता है जिस पर शायद ही कोई कंटेंट हो।
।
सबको पकड़ो
इस दृष्टिकोण के साथ, आप ब्राउज़र इतिहास का उपयोग करते हैं, लेकिन बस सर्वर पर एक कैच-ऑल सेट करें, जो आपको भेजता /*
है index.html
, प्रभावी रूप से आपको हैश इतिहास के साथ समान स्थिति देता है। हालांकि आपके पास स्वच्छ URL हैं और आप अपने सभी उपयोगकर्ता के पसंदीदा को अमान्य किए बिना बाद में इस योजना में सुधार कर सकते हैं।
डाउनसाइड्स :
- और अधिक जटिल स्थापित करने के लिए
- फिर भी कोई अच्छा एसईओ नहीं
।
संकर
हाइब्रिड दृष्टिकोण में आप विशिष्ट मार्गों के लिए विशिष्ट स्क्रिप्ट जोड़कर कैच-ऑल परिदृश्य पर विस्तार करते हैं। आप अपनी साइट के सबसे महत्वपूर्ण पृष्ठों को शामिल सामग्री के साथ वापस करने के लिए कुछ सरल PHP स्क्रिप्ट बना सकते हैं, इसलिए Googlebot कम से कम यह देख सकता है कि आपके पृष्ठ पर क्या है।
डाउनसाइड्स :
- और भी अधिक जटिल स्थापित करने के लिए
- केवल उन मार्गों के लिए अच्छा एसईओ जो आप विशेष उपचार देते हैं
- सर्वर और क्लाइंट पर सामग्री प्रदान करने के लिए डुप्लिकेटिंग कोड
।
isomorphic
क्या होगा यदि हम अपने सर्वर के रूप में नोड जेएस का उपयोग करते हैं ताकि हम दोनों छोर पर एक ही जेएस कोड चला सकें ? अब, हमारे पास हमारे सभी मार्ग एकल प्रतिक्रिया-राउटर कॉन्फ़िगरेशन में परिभाषित हैं और हमें अपने रेंडरिंग कोड की नकल करने की आवश्यकता नहीं है। यह बोलने के लिए 'पवित्र कब्र' है। सर्वर उसी तरह का मार्कअप भेजता है, जैसा कि अगर क्लाइंट पर पेज ट्रांजिशन हुआ था, तो हम उसे खत्म कर देंगे। यह समाधान एसईओ के संदर्भ में इष्टतम है।
डाउनसाइड्स :
- सर्वर को JS चलाने में सक्षम होना चाहिए । मैंने जावा आइकॉन नैशोर्न के साथ प्रयोग किया है लेकिन यह मेरे लिए काम नहीं कर रहा है। व्यवहार में इसका ज्यादातर अर्थ है कि आपको एक नोड जेएस आधारित सर्वर का उपयोग करना चाहिए।
- कई मुश्किल पर्यावरणीय मुद्दे (
window
सर्वर-साइड आदि का उपयोग करके )
- तेजी से सीखने की अवस्था
।
मुझे कौन सा उपयोग करना चाहिए?
वह चुनें जिसे आप दूर कर सकते हैं। व्यक्तिगत रूप से मुझे लगता है कि कैच-ऑल सेट करने के लिए काफी सरल है, इसलिए यह मेरी न्यूनतम होगी। यह सेटअप आपको समय के साथ चीजों में सुधार करने की अनुमति देता है। यदि आप पहले से ही अपने सर्वर प्लेटफॉर्म के रूप में नोड जेएस का उपयोग कर रहे हैं, तो मैं निश्चित रूप से एक आइसोमॉर्फिक ऐप करने की जांच करूंगा। हां यह पहली बार में कठिन है, लेकिन एक बार जब आप इसे लटका लेते हैं तो यह वास्तव में समस्या का एक बहुत ही सुंदर समाधान है।
इसलिए मूल रूप से, मेरे लिए, वह निर्णायक कारक होगा। यदि मेरा सर्वर नोड जेएस पर चलता है, तो मैं आइसोमॉर्फिक जाऊंगा; अन्यथा मैं कैच-ऑल सॉल्यूशन के लिए जाऊंगा और समय बढ़ने और एसईओ आवश्यकताओं के अनुसार इसकी (हाइब्रिड सॉल्यूशन) पर विस्तार करूंगा।
यदि आप रिएक्ट के साथ आइसोमॉर्फिक (जिसे 'यूनिवर्सल' भी कहा जाता है) रेंडर करना सीखना चाहते हैं, तो इस विषय पर कुछ अच्छे ट्यूटोरियल हैं:
इसके अलावा, आपको आरंभ करने के लिए, मैं कुछ स्टार्टर किट देखने की सलाह देता हूं। वह चुनें जो प्रौद्योगिकी स्टैक के लिए आपकी पसंद से मेल खाता है (याद रखें, एमवीसी में रिएक्ट सिर्फ वी है, आपको पूर्ण ऐप बनाने के लिए अधिक सामान की आवश्यकता है)। स्वयं फेसबुक द्वारा प्रकाशित एक को देखने के साथ शुरू करें:
या समुदाय द्वारा कई में से एक को चुनें। अब एक अच्छी साइट है जो उन सभी को अनुक्रमित करने की कोशिश करती है:
मैंने इनसे शुरुआत की:
वर्तमान में मैं सार्वभौमिक प्रतिपादन का एक होम-काढ़ा संस्करण उपयोग कर रहा हूं जो ऊपर के दो स्टार्टर किट से प्रेरित था, लेकिन वे अब पुराने हैं।
आपकी परीक्षा के साथ अच्छी किस्मत!