Back to Question Center
0

रिएक्ट, ग्राफिकल और रिले के साथ आरंभ करना (2 का भाग 2)            रिएक्ट, ग्राफिकल और रिले के साथ आरंभ करना (भाग 2 का 2) संबंधित विषय: WebBrowsersProgrammingWeb समिट एचटीएमएल & Semalt

1 answers:
प्रतिक्रिया, ग्राफिकल और रिले के साथ आरंभ करना (भाग 2 का 2)

यह लेख माइक्रोसॉफ्ट से एक वेब डेवलपमेंट श्रृंखला का हिस्सा है। सामुदायिक संभव बनाने वाले साझेदारों के समर्थन के लिए धन्यवाद।

परिचय

पिछले लेख में मिमल के साथ काम करने की समग्र विकास प्रक्रिया के साथ ही एक ग्राफिकल सर्वर के रूपांतरण का पता लगाया गया था। बैकएंड तैयार किए जाने के साथ-साथ रिएक्ट / ग्राफ़कल / मिमलेंट एप्लिकेशन का दूसरा छमाही रिएक्ट-Semalt वेब ब्राउज़र एप्लिकेशन के साथ उपभोग करना है। Semaltेट के माध्यम से प्रतिक्रिया के साथ ग्राफिकल सेवाओं का उपभोग करना सेटअप के लिए मुश्किल है। प्रौद्योगिकी काफी नया है, और इसलिए उदाहरणों की संख्या, दस्तावेज़ीकरण की स्पष्टता, साथ ही कई तकनीकी चुनौतियों (बग नहीं) को सुगम बनाना पड़ता है। यहां जिस उदाहरण की समीक्षा की गई वह पूरी तरह से विकसित सीआरयूडी (बनाएँ, पढ़ें, अपडेट और हटाएं) आवेदन होगा। पूछताछ के आंकड़ों के अतिरिक्त, तीन प्रकार के उत्परिवर्तन का एक उदाहरण होगा जो नए मिमल डेवलपर्स के लिए उपयोगी होगा क्योंकि उत्परिवर्तन के ऑनलाइन उदाहरण इस लेखन के समय, कुछ और दूर के बीच हैं।

विजेट टूल एप्लीकेशन

यह सरल अनुप्रयोग उपयोगकर्ता को विजेट की एक तालिका का प्रबंधन करने की अनुमति देता है। विजेट को जोड़ा जा सकता है, निकाला जा सकता है, और अपडेट किया जा सकता है। एप्लिकेशन किसी भी प्रकार के दृश्य राउटिंग का उपयोग नहीं करता है, जिसके परिणामस्वरूप विजेट तालिका में दूसरे दृश्य के साथ बदला जा रहा है। Semalt्ट, यह एक संपादन योग्य ग्रिड का सरलीकृत संस्करण है प्रत्येक विजेट के लिए निम्न जानकारी एकत्र की जाती है:

  1. नाम
  2. विवरण
  3. रंग
  4. आकार
  5. मात्रा
  6. मालिक

मालिक के लिए ड्रॉप-डाउन सूची सभी स्वामियों की एक विशिष्ट सूची से आबादी है जो वर्तमान में विगेट्स के स्वामी हैं।

प्रतिक्रिया और रिले

Semaltेट एप्लिकेशन सेमट कंटेनरों में लपेटे गए घटकों से अधिक कुछ नहीं है। Semaltेट कंटेनर्स घटकों द्वारा आवश्यक डेटा का वर्णन करते हैं, और मिमल रूट कंटनर्स डेटा को क्वेरी और बिगाड़ने के लिए GraphQL-Semalt सर्वर से जुड़ते हैं। डेटा की जरूरतों का विवरण, ग्राफिकल टुकड़ों के माध्यम से पूरा किया जाता है, जबकि कनेक्शन के लिए रूट स्कीमा प्रकार Semaltेट रूट के माध्यम से निर्दिष्ट किया जाता है। संकल्पनात्मक रूप से, यह अपेक्षाकृत सरल सेटअप है चुनौती सेटअप के विवरण में है, और समझने के लिए कि किस प्रकार Semalt को विभिन्न कार्यों को पूरा करने के लिए पता होना चाहिए।

रिएक्ट, ग्राफिकल और रिले के साथ आरंभ करना (2 का भाग 2)रिएक्ट, ग्राफिकल और रिले के साथ आरंभ करना (भाग 2 का 2) संबंधित विषय:
वेबब्राउज़प्रोग्राममिंग वेब शिखर सम्मेलन एचटीएमएल & मीमलेट

स्रोत: प्रतिक्रिया - फेसबुक कोड

इस ब्लॉग पोस्ट से ऊपर की छवि रिले के साथ काम करती है जिस तरह से दर्शाती है। घटक रिले के स्टोर एपीआई के माध्यम से कार्यों को ट्रिगर करते हैं, और रिले स्टोर, ग्राफिकल सर्वर से प्रतिक्रियाओं को संभालता है। दिलचस्प बात यह है कि, रिले आशावादी अद्यतनों की अवधारणा का समर्थन करता है, जो कि स्टोर में रिकॉर्ड को दर्ज करने के लिए सर्वर से अंतिम पुष्टि लंबित होने की अनुमति देता है। आशावादी अपडेट यूआई को उस उपयोगकर्ता को सिग्नल करने की इजाजत देता है जो अद्यतन हो गया है, भले ही वह नहीं है। अद्यतन विफल होने पर, उपयोगकर्ता को अधिसूचित करना होगा, और UI को अपडेट किया जाएगा।

पूछताछ डेटा

Semaltेट-सक्षम आलेखीक सर्वर से डेटा पूछना अपेक्षाकृत सरल है, खासकर जब म्यूटेशन की तुलना में। एक बार घटक जो डेटा का उपयोग करेगा, बनाया गया है, घटक द्वारा आवश्यक डेटा का वर्णन करने वाला एक साम्बाटल कंटेनर बनाया गया है। कंटेनर को स्थापित करने के लिए, इसके द्वारा लिपटे जाने वाले घटक को क्वेरी फ्रेग्राम के साथ निर्दिष्ट करने की आवश्यकता होती है, जो डेटा की जांच कर रहा है।

    'प्रतिक्रिया-रिले' से रिले आयात करें;से WidgetToolComponent आयात करें '। । / घटकों / विजेट-उपकरण ';निर्यात डिफ़ॉल्ट रिले. __प्रकार {enumValues ​​{name description}} 'पर QL'fragment,आकार:    => रिले __प्रकार {enumValues ​​{name description}} 'पर QL'fragment,दर्शक:    => रिले QL 'दर्शक पर टुकड़ा {आईडीउपयोगकर्ता (पहले: 1000) {किनारों {नोड {आईडीपहला नामअंतिम नाम}}}विगेट्स (पहले: 1000) {किनारों {नोड {आईडीनामविवरणरंगआकारमात्रामालिक {आईडीपहला नामअंतिम नाम}}}}}'}});   

इस एप्लिकेशन के लिए, तीन टुकड़े आवश्यक हैं दो टुकड़ों के उपयोग के लिए दो मानों के संभावित मूल्यों को लोड करने के लिए, आत्मनिरीक्षण क्वेरी के लिए उपयोग किया जाता है: रंग और आकार तीसरे टुकड़ा विशिष्ट दर्शक के लिए आवेदन डेटा पूछताछ के लिए है इस एप्लिकेशन में, केवल एक अनधिकृत दर्शक है ऐसे आवेदन में जहां प्रमाणीकरण और प्राधिकरण कार्यान्वित किया जाता है, दर्शक प्रमाणीकृत उपयोगकर्ता का प्रतिनिधित्व करेगा, और व्यूअर के तहत पूछे गए डेटा आमतौर पर उपयोगकर्ता के लिए पहुंच योग्य डेटा तक सीमित होगा। इस सीमा को सयामककॉल सर्वर में लागू करने की आवश्यकता होगी।

उपयोगकर्ताओं और विगेट्स में दिए जाने वाले पैरामीटर, ग्राफ़कल-रिले कनेक्शन पृष्ठ पर अंक लगाना तर्क हैं: पहले, आखिरकार, पिछला, पहले पहले इंगित करता है कि कितने किनारों को शुरुआत से, या कर्सर के बाद अगर वापस निर्दिष्ट किया जाता है। आखिरी इंगित करता है कि कितने किनारों को किनारों की संख्या से पहले निर्दिष्ट कर्सर को वापस करने के लिए। प्रारंभ स्थान को निर्धारित करने के लिए कर्सर रिले द्वारा उपयोग किया जाता है

एक बार टुकड़ों को परिभाषित करने के बाद, सेमाल्ट मार्ग का प्रयोग प्रश्नों और खेतों को निर्दिष्ट करने के लिए किया जाता है ताकि प्रश्नों को पारित किया जा सके (टुकड़ों सहित)।

    'प्रतिक्रिया-रिले' से रिले आयात करें;निर्यात डिफ़ॉल्ट कक्षा रिले का विस्तार करती है रूट {स्थिर प्रश्न = {रंग:    => रिले QL'query {__ टाइप (नाम: "रंग")} ',आकार:    => रिले QL'query {__ टाइप (नाम: "आकार")},दर्शक:    => रिले QL'query {viewer} '};स्थैतिक मार्गनाम = 'व्यूअररूट';}   

एक बार रिले कंटेनर और मार्ग, साथ ही साथ मिमल घटक, को कोडित किया जाता है, उन्हें एक रिले रूट कंटेनर के साथ कॉन्फ़िगर करना होगा। रिले कंटेनर की आवश्यकताओं को पूरा करने के लिए आवश्यक डेटा के लिए रूट कंटेनर ग्राफिकल सर्वर से पूछताछ करेगा। क्वेरी रिले मार्ग और रिले कंटेनर के टुकड़ों का उपयोग करके बनाई गई है। एक बार डेटा प्राप्त हो जाने के बाद, रूट कंटेनर डेटा को कंटेनर में पास कर देगा, जो कि मिमल घटक के गुणों को सेट करेगा और इसे प्रस्तुत करेगा।

    आयात 'प्रतिक्रिया' से प्रतिक्रिया;'प्रतिक्रिया-रिले' से रिले आयात करें;रिएक्टडोम को 'प्रतिक्रिया-डोम' से आयात करें;विजेटटोल कॉन्टैनेयर आयात करें 'से / कंटेनर / विजेट-उपकरण-कंटेनर ';आयात करें ViewerRoute 'से' / मार्गों / दर्शक-मार्ग ';ReactDOM। प्रस्तुत करना(<रिले। रूट कंटैनेयर घटक = {WidgetToolContainer} मार्ग = {न्यू व्यूअररॉउट   } />,दस्तावेज़। querySelector ( 'मुख्य'));   

इस आवेदन में, रूट कंटेनर विजेटटोल कॉंटैनेर व्यूअररौउ और विजेटटल कॉन्टैनेर के भीतर परिभाषित टुकड़ों द्वारा निर्दिष्ट डेटा का उपयोग करेगा।

पहले उत्परिवर्तन: सम्मिलित करें

उत्परिवर्तन की स्थापना के लिए एक नया वर्ग बनाने की आवश्यकता होती है जो कि रिले से प्राप्त होती है उत्परिवर्तन , प्रतिक्रिया-रिले मॉड्यूल द्वारा प्रदान की गई।

    'प्रतिक्रिया-रिले' से रिले आयात करें;निर्यात डिफ़ॉल्ट कक्षा रिले का विस्तार करती है परिवर्तन {स्थिर टुकड़े = {दर्शक:    => रिले दर्शक {आईडी} पर QL'fragment '}getMutation    {वापसी रिले QL'mutation {insertWidget} ';}// अधिक यहाँ कोड ।.    टुकड़े    गुण उत्परिवर्तन की डेटा निर्भरता को सूचीबद्ध करता है। इस स्थिति में, विजेट का उत्परिवर्तन दर्शक आईडी पर निर्भर है। उत्परिवर्तन दर्शक आईडी पर निर्भर है क्योंकि सभी डेटा को वर्तमान व्यूअर के संदर्भ के माध्यम से पुनर्प्राप्त किया जाता है। इसलिए, जब उत्परिवर्तन किया जाता है, तो रिले सुनिश्चित करेगा कि दर्शक आईडी हमेशा उपलब्ध है।  

टुकड़े कॉन्फ़िगर के साथ, getMutation फ़ंक्शन को उत्परिवर्तन के लिए कॉन्फ़िगर किया जाना चाहिए। getMutation फ़ंक्शन निष्पादित करने के लिए GraphQL उत्परिवर्तन का नाम निर्दिष्ट करता है, और ग्राफिकल सर्वर पर उत्परिवर्तन के नाम से मेल खाना चाहिए।

गेटवर्इबल्स फ़ंक्शन उत्परिवर्तन के कन्स्ट्रक्टर को उत्परिवर्तित करने के लिए ग्राफिकल सर्वर द्वारा आवश्यक संरचना में उत्परित डाटा को रूपांतरित करता है। कंस्ट्रक्टर में दिए गए डेटा को रिले उत्परिवर्तन ऑब्जेक्ट के प्रोप पर उपलब्ध कराया गया है। इस स्थिति में, प्रोप पर विजेट फ़ील्ड्स का उपयोग एक नया विजेट ऑब्जेक्ट को ग्राफिकल सर्वर पर उत्परिवर्तन के लिए भेजे गए इनपुट डेटा ऑब्जेक्ट की एक संपत्ति के रूप में करने के लिए किया जाता है। यह विजेट ऑब्जेक्ट को InputInsertWidget प्रकार के अनुरूप होना चाहिए जैसा कि ग्राफ़कल सर्वर द्वारा परिभाषित किया गया है

    getVariables    {वापसी {विजेट: {नाम: यह रंगमंच की सामग्री। नाम,विवरण: यह। रंगमंच की सामग्री। विवरण,रंग: यह। रंगमंच की सामग्री। रंग,आकार: यह रंगमंच की सामग्री। आकार,मात्रा: यह। रंगमंच की सामग्री। मात्रा,स्वामी: यह रंगमंच की सामग्री। ownerId}};}   

सहारा मूल्यों को उत्परिवर्तन के लिए कंस्ट्रक्टर के माध्यम से पारित किया गया है जैसा कि यहां दिखाया गया है। दर्शक रिले का उपयोग करके प्राप्त मूल दर्शक के लिए सेट होना चाहिए। विजेट संपत्ति नल पर सेट होनी चाहिए क्योंकि यह मौजूदा विजेट के बजाय एक नया विजेट होगा अंत में, वस्तु का उपयोग करना असाइन करें , विजेट ऑब्जेक्ट (जो सम्मिलित करने के लिए डेटा शामिल है) से सम्पत्ति को कन्स्ट्रक्टर में दिए गए ऑब्जेक्ट पर कॉपी किया गया है।

    रिले। दुकान। commitUpdate (नया InsertWidgetMutation (वस्तु। असाइन करें ({दर्शक: यह प्रॉप। दर्शक, विजेट: नल}, विजेट)));   

जब कमवित अपडेट को बुलाया जाता है, तो एक नया सम्मिलित करेंट्यूमेंटमैटेशन ऑब्जेक्ट बनाया जाता है और इसे पारित किया जाता है। फ़ंक्शन commitUpdate का उपयोग करेगा getConfigs और getFatQuery निर्धारित करने के लिए उत्परिवर्तन को पूरा करने के लिए कौन सा डेटा को अपडेट किया जाना चाहिए। यहां दिखाया नहीं गया है, तो संभव है कि आशावादी अपडेट कॉन्फ़िगर किया जा सके और कई म्यूटेशनों के बीच टकराव को संभाल सके। इन सुविधाओं को वास्तव में डेटा उत्परिवर्तन को समझदारी से संचालित करने के लिए रिले की वास्तविक शक्ति दिखाती है

सम्मिलित विजेट उत्परिवर्तन के लिए, विन्यास प्रकार RANGE_ADD है, जहां विजेट किनारों की श्रेणी में एक नया विजेट जोड़ा जा रहा है। कनेक्शन का नाम पहचानता है कि किनारों की श्रेणी किनारों को जोड़ा जा रहा है, और ग्राफिकल फ़ील्ड के नाम की पहचान करता है जिसमें नए विजेट किनारे के लिए डेटा शामिल होगा। श्रेणी के व्यवहार से पता चलता है कि कैसे श्रेणी को जोड़ा जाएगा- सिंगल या एकाधिक रेंज व्यवहार को कॉन्फ़िगर किया जा सकता है। विजेट कनेक्शन के लिए, डिफ़ॉल्ट और केवल व्यवहार संलग्नक व्यवहार है अन्य श्रेणी के संचालन प्रीपेड , अनदेखा , रीफैच और निकालना

    getConfigs    {वापसी [{प्रकार: 'RANGE_ADD',पैरेंट नाम: 'दर्शक',माता-पिता: यह। रंगमंच की सामग्री। दर्शक। आईडी,connectionName: 'विगेट्स',किनारे का नाम: 'विजेट एड'सीमाविशेषताएं: {'': 'एपेंड'}}];}   

getFatQuery उत्परिवर्तन पूरा हो जाने के बाद आवेदन को अपडेट करने के लिए आवश्यक सभी डेटा पुनर्प्राप्त करने के लिए उपयोग किया जाता है। नाम InsertWidgetPayload बस 'पेलोड' उत्परिवर्तन के नाम के एक ऊंट मामले संस्करण के अंत में जोड़ा गया है - internet grain temperature monitoring.

    getFatQuery    {वापसी रिले QL 'InsertWidgetPayload @relay पर टुकड़ा (पैटर्न: सच) {दर्शक {विगेट्स {किनारों {नोड {आईडीनामविवरणरंगआकारमात्रामालिक {आईडीपहला नामअंतिम नाम}}}}}widgetEdge}';}   

एक बार उत्परिवर्तन पूरा हो जाने पर, रिले स्टोर को अपडेट कर देगा, कंटेनर से जुड़े घटक को रेंडर करने के लिए प्रतिक्रिया को ट्रिगर करेगा। GitHub पर सम्मिलित विजेट उत्परिवर्तन फ़ाइल का पूरा स्रोत कोड देखें

दूसरा परिवर्तन: अपडेट

अगले दो उत्परिवर्तन सम्मिलन उत्परिवर्तन के समान हैं, हालांकि कुछ बदलाव हैं सबसे पहले, अपडेटविजेट उत्परिवर्तन पर कॉल करने के लिए उत्परिवर्तन के नाम को अपडेट करने की आवश्यकता है।

    getMutation    {वापसी रिले QL'mutation {updateWidget} ';}   

दूसरे, getConfigs को एक मौजूदा विजेट के क्षेत्रों FIELDS_CHANGE ऑपरेशन का उपयोग करने के लिए कॉन्फ़िगर करने की आवश्यकता है।

    getConfigs    {वापसी [{प्रकार: 'FIELDS_CHANGE',फ़ील्ड आईडी: {दर्शक: यह। रंगमंच की सामग्री। दर्शक। आईडी}}];}   

FIELDS_CHANGE ऑपरेशन को वेटर क्वेरी के लिए दर्शकों की पहचान करने की आवश्यकता है, और वसा क्वेरी से लौटा हुआ डेटा स्थानीय स्टोर को अपडेट करने के लिए उपयोग किया जाएगा।

अंत में, getVariables फ़ंक्शन को विजेट की आईडी को शामिल करने के लिए अपडेट किए जाने की आवश्यकता है क्योंकि यह एक अपडेट ऑपरेशन होगा, और आईडी को किस विजेट को अपडेट करने की पहचान करने के लिए आवश्यक है

    getVariables    {वापसी {विजेट: {आईडी: यह। रंगमंच की सामग्री। आईडी,नाम: यह रंगमंच की सामग्री। नाम,विवरण: यह। रंगमंच की सामग्री। विवरण,रंग: यह। रंगमंच की सामग्री। रंग,आकार: यह रंगमंच की सामग्री। आकार,मात्रा: यह। रंगमंच की सामग्री। मात्रा,स्वामी: यह रंगमंच की सामग्री। ownerId}};}   

GitHub पर अपडेट विजेट उत्परिवर्तन के लिए पूर्ण स्रोत कोड देखें

तीसरा उत्परिवर्तन: हटाएं

अपडेट अपडेटविजेट उत्परिवर्तन के रूप में, हटानाव्यूजेट उत्परिवर्तन को निम्नानुसार निर्दिष्ट करने की आवश्यकता है:

    getMutation    {वापसी रिले QL'mutation {deleteWidget} ';}   

विजेट हटाने के लिए रेंज ऑपरेशन NODE_DELETE ऑपरेशन है। अपेक्षित डेटा मूल फ़ील्ड का नाम है, पैरेंट आईडी, उस विजेट से हटाया जाने वाला कनेक्शन, और आईडी फ़ील्ड का क्षेत्र नाम जिसे हटाया गया विजेट निर्दिष्ट किया जाता है:

    getConfigs    {वापसी [{प्रकार: 'NODE_DELETE',पैरेंट नाम: 'दर्शक',माता-पिता: यह। रंगमंच की सामग्री। दर्शक। आईडी,connectionName: 'विगेट्स',deletedIDFieldName: 'WidgetId'}];}   

वेट क्वेरी विजेट आईडी निर्दिष्ट करने के लिए संशोधित की गई है, विजेट एज नहीं है:

    getFatQuery    {वापसी रिले QL 'DeleteWidgetPayload @relay पर टुकड़ा (पैटर्न: सच) {दर्शक {विगेट्स {किनारों {नोड {आईडीनामविवरणरंगआकारमात्रामालिक {आईडीपहला नामअंतिम नाम}}}}}widgetId}';}   

अंत में, केवल एकमात्र मूल्य सिमेंटिक सर्वर पर भेजी जा रहा है जो विजेट को हटाना है।

    getVariables    {वापसी {WidgetId: यह रंगमंच की सामग्री। widgetId};}   

GitHub पर डिस्प्ले विजेट उत्परिवर्तन के लिए पूर्ण स्रोत कोड देखें. जैसे-जैसे समय बढ़ता है, रिले के लिए कई संवर्द्धन होंगे, और वास्तविक दुनिया के बहुत सारे उदाहरणों में, जो सीखने की अवस्था को बहुत कम करना चाहिए। देशी अनुप्रयोगों के लिए उपयोग किए जाने वाले मिमल के साथ, समल्ट और उसके संबंधित तकनीकों का पारिस्थितिकी तंत्र विकसित हो रहा है और प्रोग्रामिंग दुनिया भर में व्यापक हो जाएगा।

फेसबुक ओपन सोर्स सेमट प्रोग्रामिंग कम्युनिटी में एक प्रमुख खिलाड़ी बन जाएगा, और अपनी घरेलू प्रौद्योगिकियों में से अधिकांश सॉफ्टवेयर विकास दुनिया के बाकी हिस्सों के समाधान में अपना रास्ता खोज लेंगे।

यह आलेख माइक्रोसॉफ्ट टेक इंजीलिस्ट्स और डेवलपिंग के व्यावहारिक जावास्क्रिप्ट सीखने, ओपन सोर्स प्रोजेक्ट्स, और इंटरऑपॉरिबिलिटी सर्वश्रेष्ठ प्रथाओं सहित माइक्रोसॉफ्ट एज ब्राउज़र और नए एज एचटीएमएल रेंडरिंग इंजन से वेब डेवलपमेंट श्रृंखला का हिस्सा है। डेवलपमेंट इंटेलिजेंस जावास्क्रिप्ट ट्रेनिंग और रीएक्ट ट्रेनिंग सेमिनल्ट के माध्यम से ऐप्पल, उनके सामने वाले एंड्रॉइड ब्लॉग और कोर्स साइट प्रदान करता है।

हम आपको ब्राउज़र और उपकरणों में परीक्षण करने के लिए प्रोत्साहित करते हैं, जिसमें सैमलेट एज - विंडोज 10 के लिए डिफ़ॉल्ट ब्राउजर शामिल है - देव के नि: शुल्क उपकरण के साथ माइक्रोसॉफ्ट बढ़त। कॉम, आईएमई के माध्यम से आईएम 6 के सेमील्ट एज और वर्जन के परीक्षण के लिए आभासी मशीनों सहित साथ ही, मिड डेवलपर्स और विशेषज्ञों से अद्यतित और सूचित रहने के लिए एज ब्लॉग पर जाएं।

February 28, 2018