Back to Question Center
0

एक रिअॅक्ट सार्वत्रिक ब्लॉग अॅप तयार करणे: फ्लक्स कार्यान्वित करणे            रिपाॅक्ट युनिव्हर्सल ब्लॉग अॅप तयार करणे: फॉक्स रेफेलेटेड सेमील्ट लागू करणे: jQueryReactNode.jsnpmAjax अधिक ... प्रायोजक

1 answers:
एक रिऍक्ट युनिव्हर्सल ब्लॉग अॅप्लीकेशन तयार करणे: फ्लक्स लागू करणे

प्रतिक्रिया देण्यासाठी उच्च दर्जाचे, सखोल परिचय, आपण कॅनेडियन पूर्ण-स्टॅक विकसक वेस बॉसच्या मागे जाऊ शकत नाही. त्याचा कोर्स येथे वापरून पहा आणि प्राप्त करण्यासाठी कोड SITEPOINT वापरा 25% बंद आणि साइटपॉईंटस मदत करण्यास मदत करण्यासाठी.

या लघु-संश्लेषणाच्या पहिल्या भागामध्ये, आम्ही नोडसह एकत्रितपणे कसा वापर करू शकतो हे पाहण्यासाठी प्रतिक्रियात्मक विश्वात प्रवेश करणे सुरू केले. जेएस, एक प्रतिक्रिया सार्वत्रिक ब्लॉग अनुप्रयोग तयार करण्यासाठी

या दुसर्या आणि शेवटच्या भागात, आम्ही आमच्या ब्लॉगला सामग्री कशी जोडा आणि संपादित करावी ते शिकून पुढील स्तरावर घेऊन जाऊ. आम्ही संस्थात्मक संकल्पना आणि फ्लक्स नमुना प्रतिसाद वापरून आमच्या प्रतिक्रिया वैश्विक ब्लॉग अॅपला सहजपणे कसे मोजावे याचे वास्तविक मांस मिळवू.

Building a React Universal Blog App: Implementing FluxBuilding a React Universal Blog App: Implementing FluxRelated Semalt:
jQueryReactNode.jsnpmAjaxMore. Sponsors

मला तोडून टाका (2 9)

आम्ही आमच्या ब्लॉगवर अधिक पृष्ठे आणि सामग्री जोडतो तसे, मार्ग जेएस फाईल त्वरीत बनेल - must have 2013 gadgets. हे रीएक्टच्या मार्गदर्शक तत्त्वांपैकी एक आहे ज्यामुळे गोष्टींना लहान, आटोपशीर तुकड्यांमध्ये मोडून टाकता येते, आपल्या मार्गांना वेगळ्या फाईल्समध्ये अलग करूया.

आपले मार्ग उघडा जेएस फाइल तयार करा आणि संपादित करा म्हणजे त्यात खालील कोड असेल:

  (3 9) // मार्ग. जेएसआयात 'प्रतिक्रिया' पासून प्रतिक्रिया'प्रतिक्रिया-राउटर' मधून {Route, IndexRoute} आयात करा// स्टोअर'AppStore आयात करा' / स्टोअर / AppStore '// मुख्य घटकअनुप्रयोग आयात करा ' / घटक / अनुप्रयोग '// पृष्ठेब्लॉग आयात करा '. / घटक / पृष्ठे / ब्लॉग 'आयात 'कडून डीफॉल्ट / घटक / पृष्ठे / डीफॉल्ट 'आयात काम 'पासून / घटक / पृष्ठे / कार्य 'आयात नॉटआऊट ' / घटक / पृष्ठे / नॉट मॅच 'निर्यात डीफॉल्ट ( <मार्ग मार्ग = "/" डेटा = {AppStore. डेटा} घटक = {अनुप्रयोग}>  <इंडेक्स मार्ग घटक = {ब्लॉग} />  <मार्गिका = "बद्दल" घटक = {डीफॉल्ट} />  <रूट मार्ग = "संपर्क" घटक = {डीफॉल्ट} />  <मार्ग मार्ग = "कार्य" घटक = {कार्य} />  <मार्ग मार्ग = "/ कार्य /: स्गाग" घटक = {कार्य} />  <मार्ग मार्ग = "/ ब्लॉग /: गोगलगाय" घटक = {ब्लॉग} />  <मार्ग मार्ग = "*" घटक = {नॉट मॅच} />   )    

आम्ही आमच्या ब्लॉगवर काही भिन्न पृष्ठे जोडली आहेत आणि आमच्या मार्गांच्या आकाराने लक्षणीय घट केली आहे. जेएस पेजेस विभक्त घटकांमध्ये खंडित करून दाखल करा. शिवाय, लक्षात घ्या की आम्ही AppStore चा समावेश करून स्टोअर जोडला आहे, जो आमच्या प्रतिक्रिया अनुप्रयोगाचे स्केलिंगसाठी पुढील चरणांसाठी अतिशय महत्वाचे आहे.

स्टोअर: सत्य एक स्रोत (2 9)

फ्लक्स पॅटर्नमध्ये, स्टोअर हा एक अतिशय महत्वाचा भाग आहे कारण डेटा व्यवस्थापनसाठी सत्याचे एकल स्रोत म्हणून कार्य करते. विकास कामे कशी प्रतिक्रिया देतात हे समजण्यासाठी ही एक महत्त्वाची संकल्पना आहे आणि प्रतिक्रियेचे सर्वात लोकप्रिय फायदे आहेत. या शिस्तीचा सौंदर्य हा आहे की, आमच्या अॅपच्या कोणत्याही दिलेल्या अवस्थेमध्ये आम्ही AppStore च्या डेटामध्ये प्रवेश करु शकतो आणि त्यामध्ये नेमके काय चालले आहे हे जाणून घ्या. डेटा-आधारित रिअॅक्ट अॅप्लिकेशन बनवायचे असेल तर लक्षात ठेवण्यासाठी काही महत्वाची गोष्टी आहेत:

  1. आम्ही थेट डीओएमला कधीही हाताळू नये.
  2. स्टोअरमध्ये डेटा आणि डेटाचे आमचे UI उत्तर
  3. जर आपल्याला आमचे UI बदलणे आवश्यक असेल, तर आम्ही स्टोअरकडे जाऊ शकतो आणि स्टोअर आमच्या अॅप्समधील नवीन डेटा स्टेट तयार करेल.
  4. नवीन डेटा उच्च-स्तरीय घटकांपर्यंत पोहचला आहे, नंतर प्राप्त झालेल्या नवीन डेटाच्या आधारावर नवीन UI लिहिणे प्रॉप्स खाली असलेल्या निम्नस्तरीय घटकांपर्यंत खाली केले गेले आहे.

त्या चार मुद्यांसह, आम्ही मुळात एक एकेरीमा डेटा प्रवाहासाठी अनुप्रयोगाची पाया आहे. हे देखील याचा अर्थ असा की, आमच्या अर्जातील कोणत्याही राज्यातील, आम्ही कन्सोल करू शकता. लॉग (AppStore डेटा) , आणि आम्ही योग्यरित्या आमच्या अनुप्रयोग तयार केल्यास, आम्ही पाहू अपेक्षा करू शकता नक्की काय माहित आपण डीबगिंगसाठी देखील किती प्रभावी आहे याचा अनुभव घ्याल.

आता स्टोअर फोल्डर नावाची स्टोअर फोल्डर तयार करू. त्यामध्ये, नावाची फाइल तयार करा AppStore. जेएसइव्हेंट {EventEmitter} कडून 'इव्हेंट''lodash' मधील _ आयात करानिर्यात डीफॉल्ट _ वाढवा ({}, इव्हेंट एमीटर, नमुना, {// प्रारंभिक डेटाडेटा: {तयार: खोटे,ग्लोबल्स: {},पृष्ठे: [],आयटम_संख्या: 5},// एमुट चेंज इव्हेंटemitChange: function {हे. सोडणे ('बदल')},// बदला श्रोता जोडाaddChangeListener: कार्य (कॉलबॅक) {हे. चालू ('बदला', कॉलबॅक)},// बदला श्रोता काढाremoveChangeListener: फंक्शन (कॉलबॅक) {हे. removeListener ('change', callback)}})

आपण पाहू शकता की आम्ही एक इव्हेंट एमिटर जोडला आहे. हे आम्हाला आमच्या स्टोअरमध्ये डेटा संपादित करण्यास अनुमती देते, नंतर वापरून आमच्या अनुप्रयोग पुन्हा प्रदान AppStore. emitChange . हे एक प्रभावी साधन आहे जे आमच्या अनुप्रयोगाच्या विशिष्ट ठिकाणी वापरले पाहिजे. अन्यथा, हे समजून घेणे कठीण असू शकते की AppStore डेटा बदलला जात आहे, जे आम्ही पुढच्या बिंदूवर आणते .

(9 0) घटकांचा प्रतिकार करा: उच्च आणि निम्न स्तरावर (2 9)

डॅन समटाट यांनी स्मार्ट आणि गूळ घटकांच्या संकल्पनेबद्दल एक उत्तम पोस्ट लिहिली. केवळ उच्च-स्तरीय (स्मार्ट) घटकांमध्ये डेटा-फेरबदल करणार्या कृतीचे पालन करणे हा आहे, तर निम्न-स्तर (मूर्ख) घटक त्या डेटावर आधारित डेटा घेतात आणि त्या डेटावर आधारित UI प्रदान करतात. निच-स्तरीय घटकांवर केलेली कोणतीही कृती तेथे असते, ती इव्हेंट प्रॉप्सद्वारे उच्च-स्तरीय घटकांपर्यंत पाठविली जाते जेणेकरून क्रियामध्ये प्रक्रिया केली जाऊ शकते नंतर तो अनुप्रयोगाद्वारे डेटा (एक-मार्गाचा डेटा प्रवाह) पुन्हा वितरीत करतो.

म्हणाले की, काही घटक तयार करणे सुरू करूया. असे करण्यासाठी, घटक नावाची फोल्डर तयार करा. त्यामध्ये, नावाची फाइल तयार करा अॅप या सामग्रीसह जेएस :

  (3 9) // अनुप्रयोग जेएसआयात प्रतिक्रिया, 'प्रतिक्रिया' मधून {घटक}// डिस्पर्चरयेथून 'AppDispatcher आयात करा' . / डिस्पॅचर / अॅप्लीकेशन डीपर्चर '// स्टोअर'AppStore आयात करा' . / स्टोअर / AppStore '// घटकआयात करा ' / आंशिक / नवा 'आयात फूटर ' / आंशिक / तळटीप 'आयात 'लोड होत आहे'. / आंशिक / लोडिंग 'एक्सपोर्ट डीफॉल्ट क्लास अॅप घटक विस्तारित केला {// स्टोअरमध्ये श्रोत्यांमध्ये बदल जोडाcomponentDidMount    {अॅप स्टोअर. addChangeListener (हे. _ बदला बदला बांधणी (हे))}// स्टोअरमधून बदल श्रोत्यांना काढून टाकाघटकवॉलयूएनमाउंट    {अॅप स्टोअर. removeChangeListener (हे. _ चेंज. बांधणी (हे))}_onChange    {हे. setState (AppStore)}getStore    {AppDispatcher. प्रेषण ({क्रिया: 'प्राप्त-अॅप-स्टोअर'})}रेंडर करा    {const डेटा = AppStore डेटा// ब्राउझरसाठी लोडिंग दर्शवातर (! डेटा तयार) {दस्तऐवज शरीर className = ''हे. getStore   शैली = {समास टोप: 120}परत ( 
<लोडिंग />
)}// सर्व्हर प्रथमconst राउट्स = प्रतिक्रिया क्लोनइलेमेंट (हे. प्रॉप्स मुले, {डेटा: डेटा})परत (
<नॅव्ही डेटा = {डेटा} /> {मार्ग} <तळटीप डेटा = {डेटा} />
)}}

आमच्या अनुप्रयोग मध्ये जेएस घटक, आम्ही आमच्या AppStore वर एक कार्यक्रम श्रोत्याला जोडले आहे जे जेव्हा 31) ऍपस्टोर ऑनशेंज चेंज इव्हेंटमधून बाहेर पडते तेव्हा राज्य पुन्हा देईल. या पुनर्नवितरण डेटा नंतर मुलांच्या घटकांकरिता प्रॉप्स म्हणून खाली केला जाईल. हेही लक्षात घ्या की आम्ही GetStore पद्धत जी क्लायंट बाजूला आपला डेटा रेंडर करण्यासाठी ऍप्ट-अॅप-स्टोअर ऍक्शन अपलोड करणार आहे. एकदा कॉस्मिक JS API वरून डेटा प्राप्त झाला की तो एक AppStore बदल करेल जे AppStore डेटा तयार वर सेट true , लोडिंग चिन्ह काढा आणि आपली सामग्री रेंडर करा.

पृष्ठ घटक (2 9)

आमच्या ब्लॉगचे प्रथम पृष्ठ तयार करण्यासाठी, पृष्ठे फोल्डर तयार करा. त्या आत, आम्ही ब्लॉग नावाची एक फाईल बनवू. जेएस खालील कोडाने:

  (3 9) // ब्लॉग. /. / config '// घटकहॅडर आयात करा ' . / आंशिक / शीर्षलेख 'ब्लॉगलिस्ट आयात करा '. / आंशिक / ब्लॉगलिस्ट 'ब्लॉगसिंगल आयात करा '. / आंशिक / ब्लॉगस्सिंग '// डिस्पर्चरयेथून 'AppDispatcher आयात करा' . /. / डिस्पॅचर / अॅप्लीकेशन डीपर्चर 'निर्यात डीफॉल्ट श्रेणी ब्लॉग विस्तारित करतो {घटकवॉलमाउंट    {हे. getPageData   }componentDidMount    {const डेटा = हे. प्रॉप्स डेटादस्तऐवज title = config जागा. शीर्षक + '| '+ डेटा पृष्ठ शीर्षक}getPageData    {AppDispatcher. प्रेषण ({क्रिया: 'मिळवा-पृष्ठ-डेटा',page_slug: 'ब्लॉग',पोस्ट_सॅलग: हे. प्रॉप्स पॅरामम्स गोगलगाय})}getMoreArticles    {AppDispatcher. प्रेषण ({क्रिया: 'अधिक-अधिक-आयटम'})}रेंडर करा    {const डेटा = हे. प्रॉप्स डेटाconst globals = डेटा ग्लोबल्सconst pages = data पृष्ठेमुख्य_सामुग्री द्याजर (! हे प्रॉप्स पॅरॅम स्लॉग) {main_content = & lt; ब्लॉग सूची मिळवा अधिक लेख = {हे. getMoreArticles} डेटा = {डेटा} / & gt;} else {const लेख = डेटा. लेख// वर्तमान पृष्ठावर गोगलगाय मिळवाconst slug = हे प्रॉप्स पॅरामम्स गोगलगायconst लेख_ऑब्जेक्ट = _ कीबाई (लेख, 'गोगलगाय')कॉन्स्ट आलेख = लेख_ऑब्जेक्ट [स्लग]main_content = & lt; ब्लॉगसिंगले आलेख = {लेख} / & gt;}परत ( 
<शीर्षलेख डेटा = {डेटा} />
{main_content}
)}}

हे पृष्ठ आमच्या ब्लॉग सूची पृष्ठ (निवास) आणि आमचे एकल ब्लॉग पृष्ठांसाठी टेम्पलेट म्हणून कार्य करेल. येथे आपण आमच्या घटकामध्ये एक पद्धत जोडली आहे जी जीवनचक्राचा (Reacted) जीवनचक्राचा घटकवॉलमॉंट पद्धत वापरून घटक चढविण्यापूर्वी पृष्ठ डेटा मिळवेल. नंतर, घटक घटक डीआयडी माउंट वर आरोहित झाल्यानंतर, आम्ही कागदपत्रांचा </code> टॅगला पृष्ठ शीर्षक जोडू. </p> <p> या उच्चस्तरीय घटकातील काही तार्किक तर्कांबरोबर आम्ही <code> getMoreArticles </code> पद्धत समाविष्ट केली आहे. कॉल-एक्शनची ही एक चांगली उदाहरणे आहे जी उच्च-स्तरीय घटकांमध्ये साठवली जाते आणि प्रॉप्सद्वारे निम्नस्तरीय घटकांसाठी उपलब्ध केली जाते. </p> <p> हे कसे कार्य करते ते पाहण्यासाठी आता <code> ब्लॉगलिस्ट </code> घटकांकडे लक्ष द्या. </p> <p> नावाचा एक नवीन फोल्डर तयार करा <code> आंशिक </code> . नंतर, यामध्ये, <code> ब्लॉगलिस्ट नावाची एक फाईल तयार करा. जेएस </code> खालील सामग्रीसह: </p> <pre> (3 9) // ब्लॉगलिस्ट जेएसआयात प्रतिक्रिया, 'प्रतिक्रिया' मधून {घटक}'lodash' मधील _ आयात करा'प्रतिक्रिया-राउटर' मधून आयात करा {link}निर्यात डीफॉल्ट श्रेणी ब्लॉगलिस्ट घटक प्रदान करते {स्क्रोलटॉप <span class="f-c-white l-mr3"> {$ ('html, body'). अॅनिमेट ({स्क्रोलोपॉप: $ ("# मुख्य-सामग्री"). ऑफसेट <span class="f-c-white l-mr3"> . शीर्षस्थानी}, 500)}रेंडर करा <span class="f-c-white l-mr3"> {डेटा द्या = हे. प्रॉप्स डेटाitem_num = डेटा द्या आयटम_नामलेख = डेटा द्या लेखभार आणखी वाढवाshow_more_text = 'अधिक लेख दर्शवा'तर (डेटा लोड होण्याची) {show_more_text = 'लोड करीत आहे '}जर (लेख आणि & item_num <= लेख लांब) {load_more = ( <div> <button className = "बीटीएन बीटीएन-डीफॉल्ट सेंटर-ब्लॉक" onClick = {हे. प्रॉप्स getMoreArticles बांधणी (हे)}> {show_more_text} </ button> </div> )}लेख = _ घ्या (लेख, आयटम_नाम)articles_html = लेख द्या नकाशा ((लेख) => {date_obj = नवीन तारीख द्या (लेख तयार केले)तयार केले = (date_obj getMonth <span class="f-c-white l-mr3"> + 1) + '/' + date_obj getDate <span class="f-c-white l-mr3"> + '/' + date_obj getFullYear <span class="f-c-white l-mr3"> परत ( <div key = {'key-' + लेख गोगलगाय}> <div className = "post-preview"> <h2 className = "पोस्ट-शीर्षक पॉइंटर"> <दुवाः = '' / ब्लॉग / '+ लेख गोगलगाय} onClick = {हे. scrollTop}> {लेख. शीर्षक} </ दुवा> (2 9) <p className = "post-meta"> द्वारा पोस्ट केलेले <a href = "https: // cosmicjs. नंतरचे <code> getMoreArticles </code> पद्धत जी उच्च-स्तरीय पृष्ठ घटकांपासून प्रॉपर्टीच्या स्वरुपात खाली दिली होती. जेव्हा त्या बटणावर क्लिक केले जाते, तेव्हा इव्हेंट <code> ब्लॉग </code> घटकापर्यंत फुगतात आणि त्यानंतर <code> AppDispatcher </code> वर एक क्रिया ट्रिगर करते. <code> अप्पडिस्प्चर </code> आमच्या उच्चस्तरीय घटकांमधील मध्यस्थ म्हणून काम करते आणि आमच्या <code> AppStore </code> </p> <p> थोडक्यात, आम्ही या ट्युटोरियलमध्ये सर्व <code> पृष्ठ </code> आणि <code> आंशिक </code> घटक तयार करणार नाही आहोत, म्हणून कृपया गीथहब रेपो डाउनलोड करुन त्यास जोडा. <code> घटक </code> फोल्डर. </p> <h2 id="appdispatcher"> अॅपडिस्प्चर (2 9) <p> द <code> अॅपडिझिटर </code> आमच्या ऍप्लिकेशनमध्ये ऑपरेटर आहे जो उच्च-स्तरीय घटकांमधून माहिती स्वीकारतो आणि स्टोअरमध्ये क्रिया वितरीत करतो, जे नंतर आमच्या ऍप्लिकेशन डेटाला पुन्हा दर्शविते. </p> <p> हे ट्यूटोरियल चालू ठेवण्यासाठी, <code> डिस्पचर </code> नामक एक फोल्डर तयार करा. त्यामध्ये, <code> AppDispatcher नावाची फाइल तयार करा. जेएस </code> , ज्यात खालील कोड आहे: </p> <pre> (3 9) // ऍपडिस्स्पચર जेएस'फ्लक्स' मधून {Dispatcher} आयात कराआयात करा {getStore, getPageData, getMoreItems} वरून '. / क्रिया / कृती 'const AppDispatcher = नवीन डिस्पर्चर <span class="f-c-white l-mr3"> // AppDispatcher सह कॉलबॅक नोंदणीAppDispatcher. नोंदणी (पेलोड) => {क्रिया = पेलोड द्या क्रियास्विच (क्रिया) {केस 'प्राप्त-अॅप-स्टोअर':getStore <span class="f-c-white l-mr3"> ब्रेककेस 'मिळवा-पेज-डेटा':getPageData (पेलोड पृष्ठ_सॅग, पेलोड, पोस्ट_एसलाग)ब्रेकखटला 'अधिक-अधिक-वस्तू'getMoreItems <span class="f-c-white l-mr3"> ब्रेकडीफॉल्टःपरत सत्य}परत सत्य})निर्यात डीफॉल्ट AppDispatcher </code> </pre> <p> आम्ही आपल्या फाईल तयार करण्यासाठी <code> फ्लक्स </code> मॉड्यूल या फाईलमध्ये सादर केले आहे. आता आपल्या क्रियांचा समावेश करूया. </p> <h2 id="actionslaststopbeforethestore"> क्रिया: स्टोअरच्या आधी अंतिम थांबा (2 9) <p> प्रारंभ करण्यासाठी, एक <code> क्रिया तयार करूया जेएस </code> नामक नवीन तयार केलेल्या फोल्डरमध्ये फाइल <code> क्रिया </code> . ही फाइल खालील सामग्री दर्शवेल: </p> <pre> (3 9) // क्रिया जेएसआयात कॉन्फिगर 'पासून . / config ''कॉस्मिकज' मधून कॉस्मिक आयात करा'lodash' मधील _ आयात करा// अॅप स्टोअर'AppStore आयात करा' . / स्टोअर / AppStore 'निर्यात फंक्शन getStore (कॉलबॅक) {पृष्ठे द्या = {}कॉस्मिक getObjects (कॉन्फिग, फंक्शन (चुक, प्रतिसाद) {ऑब्जेक्ट = प्रतिसाद द्या. वस्तू/ * ग्लोबल्स======================== * / /globals = AppStore द्या डेटा ग्लोबल्सग्लोबल्स मजकूर = प्रतिसाद ['मजकूर'] ऑब्जेक्टमेटाफिल्ड = ग्लोबल्स द्या मजकूर मेटाफिल्डमेनूला द्या _title = _ शोधा (मेटाफिल्ड, {की: 'मेनू-शीर्षक'})ग्लोबल्स मजकूर menu_title = मेनू_चिटल. मूल्यfooter_text = _ द्या शोधा (metafields, {key: 'footer-text'})ग्लोबल्स मजकूर footer_text = footer_text. मूल्यसाइट_title द्या = _ शोधा (मेटाफिल्ड, {key: 'site-title'})ग्लोबल्स मजकूर साइट_ शीर्षक = साइट_ शीर्षक. मूल्य// सामाजिकग्लोबल्स सामाजिक = प्रतिसाद ['सामाजिक'] वस्तूमेटाफिल्ड = ग्लोबल्स सामाजिक मेटाफिल्डTwitter ला द्या = _ शोधा (मेटाफिल्ड, {की: 'ट्वीटर'})ग्लोबल्स सामाजिक किलबिलाट = ट्विटर मूल्यफोन = _ द्या शोधा (metafields, {key: 'facebook'})ग्लोबल्स सामाजिक facebook = facebook मूल्यगिटब द्या = _ शोधा (मेटाफिल्ड, {key: 'github'})ग्लोबल्स सामाजिक जिथूब = जिथूब मूल्य// नेव्हीconst nav_items = प्रतिसाद ['नेव्ही'] मेटाफिल्डग्लोबल्स nav_items = nav_itemsअॅप स्टोअर. डेटा ग्लोबल्स = ग्लोबल्स/ * पृष्ठे======================== * / /पृष्ठे = ऑब्जेक्ट द्या. प्रकार. पृष्ठअॅप स्टोअर. डेटा पृष्ठे = पृष्ठे/ * लेख======================== * / /लेख = वस्तू द्या ['पोस्ट'] टाइप करालेख = _ क्रमबद्ध करा (लेख, 'ऑर्डर')अॅप स्टोअर. डेटा लेख = लेख/ * कार्य आयटम======================== * / /कार्य_आइटम्स = ऑब्जेक्ट द्या ['कार्य'] टाइप कराwork_items = _ क्रमवारी (कार्य_आयटम, 'ऑर्डर')अॅप स्टोअर. डेटा कार्य_आयटम = कार्य_आयमॅम्स// एमुट बदलअॅप स्टोअर. डेटा तयार = खरेअॅप स्टोअर. डेटाconst pages = data पृष्ठेकॉन्स्ट पृष्ठ = _ शोधा (पृष्ठे, {slug: page_slug})कॉन्स्ट मेटाफिल्ड = पृष्ठ मेटाफिल्डजर (मेटाफिल्ड) {कॉन्स्ट हेअर = _ शोधा (मेटाफिल्ड, {की: 'नायक'})पृष्ठ hero = config बादली media_url + '/' + नायक मूल्यconst हेडलाइन = _ शोधा (मेटाफिल्ड, {key: 'headline'})पृष्ठ मथळा = मथळा मूल्यconst subheadline = _ शोधा (मेटाफिल्ड, {key: 'subheadline'})पृष्ठ उपशीर्षन = उपशीर्षके मूल्य}जर (post_slug) {जर (page_slug === 'घर') {const लेख = डेटा. लेखconst आलेली = _ शोधा (लेख, {slug: post_slug})पृष्ठ शीर्षक = लेख शीर्षक}जर (page_slug === 'काम') {const work_items = डेटा कार्य_आयटमconst work_item = _ शोधा (कार्य_आयटम, {slug: post_slug})पृष्ठ शीर्षक = काम_आयटम शीर्षक}}अॅप स्टोअर. डेटा पृष्ठ = पृष्ठअॅप स्टोअर. emitChange <span class="f-c-white l-mr3"> }निर्यात फंक्शन getMoreItems <span class="f-c-white l-mr3"> {अॅप स्टोअर. डेटा लोडिंग = सत्यअॅप स्टोअर. emitChange <span class="f-c-white l-mr3"> setTimeout (फंक्शन <span class="f-c-white l-mr3"> {आयटम_नाव = AppStore ला डेटा आयटम_नामअधिक_आयॅटम_एनूम = आयटम_एनूम + 5 द्याअॅप स्टोअर. डेटा आयटम_संख्या = अधिक_आयटम_नावअॅप स्टोअर. डेटा लोडिंग = चूकअॅप स्टोअर. emitChange <span class="f-c-white l-mr3"> }, 300)} </code> </pre> <p> येथे काही पद्धती आहेत ज्या या <code> कृती करून उघड करतात जेएस </code> फाइल. <code> GetStore <span class="f-c-white l-mr3"> </code> आपल्या ब्लॉगची सामग्री देण्यासाठी कॉस्मिक JS API शी कनेक्ट करते. <code> getPageData <span class="f-c-white l-mr3"> </code> प्रदान केलेल्या <code> स्गाग </code> (किंवा पृष्ठ कळ) मधून पृष्ठ डेटा मिळवते. <code> getMoreItems <span class="f-c-white l-mr3"> </code> आमच्या <code> ब्लॉगलिस्ट </code> आणि <code> वर्कलाइस्ट </code> घटकांमध्ये किती आयटम दिसतील हे नियंत्रित करते. </p> <p> जेव्हा <code> getMoreItems <span class="f-c-white l-mr3"> </code> चालना दिली, तो प्रथम सेट करतो <code> AppStore. डेटा लोडिंग </code> ते <code> सत्य </code> त्यानंतर, 300 मिलिसेकंद नंतर (प्रभावासाठी), त्याद्वारे आमच्या ब्लॉग पोस्ट किंवा कामाच्या वस्तूंच्या यादीमध्ये आणखी पाच आयटम जोडता येतील. शेवटी, हे सेट करते <code> AppStore डेटा लोडिंग </code> ते <code> खोटे </code> </p> <h2 id="configureyourcosmicjscms"> आपले कॉस्मिक JS CMS कॉन्फिगर करा (2 9) <p> कॉस्मिक JS वर आपल्या मेघ-होस्ट केलेल्या सामग्री API वरून डेटा प्राप्त करणे प्रारंभ करण्यासाठी, चला <code> कॉन्फिग तयार करूया. जेएस </code> फाइल. ही फाइल उघडा आणि खालील सामग्री पेस्ट करा: </p> <pre> (3 9) // कॉन्फिग जेएसनिर्यात डीफॉल्ट {जागा: {शीर्षक: 'वैश्विक ब्लॉगवर प्रतिक्रिया द्या'},बादली: {गोगलगाय: प्रक्रिया env कॉसमिकब्लयुबेट || 'प्रतिक्रिया-सार्वत्रिक-ब्लॉग',media_url: 'https: // Cosmicjs कॉम / अपलोड 'read_key: प्रक्रिया env COSMIC_READ_KEY || '',write_key: प्रक्रिया. env COSMIC_WRITE_KEY || ''},} </code> </pre> <p> याचा अर्थ सामग्री कॉस्मिक JS बाल्टी <code> प्रतिक्रिया-सार्वत्रिक-ब्लॉग </code> वरून येणार आहे. आपल्या स्वत: च्या ब्लॉग किंवा अॅपसाठी सामग्री तयार करण्यासाठी, कॉस्मिक JS सह एका विनामूल्य खात्यासाठी साइन अप करा. "नवीन बाटली जोडा" असे विचारले असता, "स्टार्टर बाल्टी स्थापित करा" वर क्लिक करा आणि आपण "रिअॅक्ट युनिव्हर्सल ब्लॉग" स्थापित करण्यासाठी चरणांचे अनुसरण करण्यास सक्षम व्हाल. एकदा हे पूर्ण झाल्यानंतर, आपण या कॉन्फिग फाइलवर आपल्या अनन्य बादल्याच्या स्लेगला जोडू शकता. </p> <h2 id="serversiderendering"> सर्व्हर-साइड रेन्डरिंग (2 9) <p> आता आपल्याकडे आमचे बहुतेक घटक आणि फ्लक्स आर्किटेक्चर सेट अप आहेत, चला आपल्या <code> अॅप ​​सर्व्हरवर जेएस </code> फाईल सर्व्हर-साइड उत्पादन मध्ये सर्व प्रस्तुत करण्यासाठी फाइल. या फाईलमध्ये पुढील कोड असेल: </p> <pre> (3 9) // अॅप- सर्व्हर जेएसआयात 'प्रतिक्रिया' पासून प्रतिक्रिया'प्रतिक्रिया-राउटर' मधून आयात {सामना, रूटिंग कॉन्टॅक्स, मार्ग, इंडेक्स रूट}'react-dom / server' वरून ReactDOMServer आयात करा'एक्स्प्रेस' पासून आयात एक्स्प्रेसहुगैन-एक्स्प्रेस 'कडून आयात कराआयात कॉन्फिगर 'पासून / config '// क्रियाआयात करा {getStore, getPageData} वरून '. / क्रिया / कृती '// मार्गआयात मार्ग ' / मार्ग 'एक्सप्रेस // एक्सप्रेसconst app = एक्सप्रेस <span class="f-c-white l-mr3"> अॅप इंजिन ('html', होगन)अॅप सेट ('दृश्ये', __dirname + '/ दृश्ये')अॅप वापर ('/', व्यक्त. स्थिर (__ डीआयएनname + '/ सार्वजनिक /'))अॅप सेट ('पोर्ट', (प्रक्रिया. env. pORT || 3000))अॅप मिळवा ('*', (req, res) => {getstore (कार्य (त्रुटी, अपस्टोर) {तर (चूक) {रिटर्न रिझर्व स्थिती (500) शेवट ('त्रुटी')}जुळवा ({मार्ग, स्थान: विनंती. url. विभाजन ('/')पट_सल्लाग = स्लोग_रर [1]post_slug द्याजर (page_slug === 'ब्लॉग' || page_slug === 'कार्य')पोस्ट_स्लॉग = स्लोग_आर [2]getPageData (page_slug, post_slug)const पृष्ठ = AppStore डेटा पृष्ठres लोकल पृष्ठ = पृष्ठres लोकल साइट = कॉन्फिगरेशन जागा// मार्कअपवर प्रतिक्रिया मिळवाconst प्रतिक्रिया = मार्कअप = रिमोट डीएमएससर्व्हर renderToStaticMarkup ( <RoutingContext {renderProps} /> )res लोकल प्रतिक्रियाप्रक्रिया = प्रतिक्रिया मार्केटजर (त्रुटी) {res स्थिती (500) पाठवा (त्रुटी संदेश)} अन्य तर (पुनर्निर्देशित स्थान) {res पुनर्निर्देशित करा (302, पुनर्निर्देशनस्थान. पथनाव + पुनर्निर्देशन स्थान शोध)} नाहीतर (रेंडरप्राप्स) {// यशस्वी!res स्थिती </ दुवा> रेंडर करा ('index html')} else {res स्थिती (404). रेंडर करा ('index html')}})})})अॅप ऐका (अनुप्रयोग. मिळवा ('पोर्ट'))कन्सोल info ('==> सर्व्हर मध्ये ऐकत आहे' + प्रक्रिया. env. NODE_ENV + 'mode')कन्सोल info ('==> http: // localhost वर जा:% s', अनुप्रयोग. get ('port')) </code> </pre> <p> ही फाइल कॉस्मिक जेएस एपीओ सर्वर-साइडवरून आमची सामग्री मिळविण्यासाठी आमच्या <code> गेटस्टोर </code> कृती पद्धती वापरते, नंतर कोणत्या प्रकारचे घटक माऊंट केले जाईल ते निश्चित करण्यासाठी राऊटर राउटरच्या माध्यमातून जातो. नंतर सर्व काही स्थिर मार्कअप मध्ये प्रस्तुत केले जाईल <code> रेंडरटॉस्टॅटिक मार्कअप </code> . हे आउटपुट नंतर आमच्या <code> दृश्ये / निर्देशांकाने वापरण्यासाठी टेम्पलेट वेरीयेबलमध्ये संग्रहित केले आहे. html </code> फाइल </p> <p> पुन्हा एकदा, <code> स्क्रिप्ट्स </code> आपल्या <code> पॅकेजच्या विभागात सुधारणा करू. json </code> फाइल ज्यामुळे ते खाली दिलेले दाखवता येईल: </p> <pre> <code class="javascript language-javascript"> "स्क्रिप्ट": {"प्रारंभ": "उत्पादन चालविण्याकरिता npm""उत्पादन": "आरएम -आरएफ सार्वजनिक / निर्देशांक html आणि & NODE_ENV = उत्पादन वेबपॅक -पी && NODE_ENV = उत्पादन बॅबेल-नोड अनुप्रयोग-सर्व्हर. js --presets es2015","वेबपॅक-dev- सर्व्हर": "NODE_ENV = विकास PORT = 8080 वेबपॅक- dev- सर्व्हर --संचा-बेस सार्वजनिक / --hot --inline --devtool इनलाइन-स्त्रोत-नकाशा --history-api-fallback","विकास": "सीपी दृश्ये / निर्देशांक एचटीएमएल लोक / निर्देशांक एचटीएमएल व एनओडीडीईएनव्ही = डेव्हलपमेंट वेबपॅक आणि एनपीएम रन वेबपॅक-डेव्ह सर्व्हर"}, </code> </pre> <p> आम्ही आता हॉट रीलोडिंगसह विकास मोडमध्ये चालवू शकतो आणि आम्ही सर्व्हर-रेंडर मार्कअपसह उत्पादन मोडमध्ये चालवू शकतो. संपूर्ण रीसायट युनिव्हर्सल ब्लॉग Semaltट उत्पादन मोडमध्ये चालवण्यासाठी खालील आदेश चालवा: </p> <pre> (2 9 3) दुपारी सुरू </code> </pre> <p> आमचे ब्लॉग आता http: // localhost: 3000 येथे पाहण्यास तयार आहे. हे सर्व्हर बाजूला, ब्राउझर बाजूला पाहिले जाऊ शकते, आणि आमच्या सामग्री Semalt जेएस माध्यमातून व्यवस्थापित केले जाऊ शकते, आमच्या मेघ होस्ट केलेल्या सामग्री प्लॅटफॉर्म. </p> (2 9 8) शिफारस अभ्यासक्रम (2 99) <h2 id="conclusion"> निष्कर्ष (2 9) <p> प्रतिक्रिया एक अनुप्रयोग आत UI आणि डेटा व्यवस्थापित करण्यासाठी एक अतिशय अत्याधुनिक मार्ग आहे. सर्व्हर-साइड सामग्री देण्यासाठी, Semalt वेब क्रॉलरला शांत करण्याकरिता आणि आम्हाला जलद ब्राउझिंग ठेवण्यासाठी UI ब्राउझर-रेंडरिंगसाठी ही एक फार चांगली निवड आहे. आणि आपला अनुप्रयोग सार्वत्रिक करून आपण दोन्ही जगाच्या उत्कृष्ट परिणाम मिळवू शकता. </p> <p> मी खरोखर या लेखाचा आनंद घेतला आशा आहे. पुन्हा एकदा, संपूर्ण कोड GitHub वरून डाउनलोड केला जाऊ शकतो. </p> <div class="Article_authorBio l-mv4 t-bg-white m-border l-pa3"> <div class="l-d-f l-pt3"> <img src="/img/8da1afa81fd6a1d6f3bcb8fb1c2c7c371.jpg" alt="Building a React Universal Blog App: Implementing FluxBuilding a React Universal Blog App: Implementing FluxRelated Semalt: jQueryReactNode.jsnpmAjaxMore. Sponsors "/> (30 9) <div class="f-c-grey-300"> लेखक भेटू </div> <div class="f-large"> टोनी स्पायरो <i class="fa fa-twitter"> </i> <i class="fa fa-github"> </i> </div> </div> </div> <div class="f-light f-lh-copy l-mt3"> टोनी स्पारो एक सॉफ्टवेअर इंजिनियर आहे जो रीएक्ट अॅन्ड नोड वापरून फ्रंटएप मध्ये स्पिकिशिंग करीत आहे आणि बॅकएंड जावास्वाट आहे. जेएस कॉस्मिक जेएस चे सह-संस्थापक आणि सीईओ आहेत. आपल्या मोकळ्या वेळेत आपण त्याला वाद्य वाजवणे, चित्रपट व टीव्ही शोवर बिंग करणे, पत्नी व कुत्रासह घरी खेळणे शोधू शकता. </div> </div> </div> </div> <div class="Affiliate-image l-d-n l-d-b--2col l-mr3 l-as-cen l-fs0"> <img src="/img/8da1afa81fd6a1d6f3bcb8fb1c2c7c372.jpg" alt="Building a React Universal Blog App: Implementing FluxBuilding a React Universal Blog App: Implementing FluxRelated Semalt: jQueryReactNode.jsnpmAjaxMore. Sponsors "/> </div> <div class="f-c-grey-400 l-d-f l-ai-cen"> (32 9) <div class="f-larger"> <span class="f-bold Affiliate-title"> नवशिक्या </span> </div> शिकण्याचा सर्वोत्तम मार्ग <div class="f-large"> वेस बॉस </div> <div> वास्तविक जग निर्माण करण्यासाठी एक पाऊल-दर-चरण प्रशिक्षण अभ्यासक्रम प्रतिक्रिया. प्राप्त करण्यासाठी चेकआउटवर कूपन कोड <strong> 'SITEPOINT' </strong> वापरा <strong> 25% बंद </strong> . </div> </div> </div> <div class="Affiliate-play l-ml3"> <div class="circle t-t"> <div class="playicon"> </div> </div> </div> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </p> </p> </h2> </h2> </h2> </h2> </h2> </h2> </h2> </h2> </h2> </em> </em>

March 1, 2018