रिएक्ट कॉन्करेंट मोड और इसकी इंटरप्टिबल रेंडरिंग क्षमताओं का अन्वेषण करें। जानें कि यह जटिल रिएक्ट एप्लिकेशनों में प्रदर्शन, प्रतिक्रिया और उपयोगकर्ता अनुभव को कैसे बेहतर बनाता है।
रिएक्ट कॉन्करेंट मोड: एक सहज उपयोगकर्ता अनुभव के लिए इंटरप्टिबल रेंडरिंग को अनलॉक करना
रिएक्ट डायनामिक और इंटरैक्टिव यूजर इंटरफेस बनाने के लिए एक प्रमुख लाइब्रेरी बन गया है। जैसे-जैसे एप्लिकेशन जटिल होते जाते हैं, प्रतिक्रिया बनाए रखना और एक सहज उपयोगकर्ता अनुभव प्रदान करना तेजी से चुनौतीपूर्ण होता जाता है। रिएक्ट कॉन्करेंट मोड नई सुविधाओं का एक सेट है जो इंटरप्टिबल रेंडरिंग को सक्षम करके इन चुनौतियों का समाधान करने में मदद करता है, जिससे रिएक्ट मुख्य थ्रेड को ब्लॉक किए बिना एक साथ कई कार्यों पर काम कर सकता है।
कॉन्करेंट मोड क्या है?
कॉन्करेंट मोड कोई साधारण स्विच नहीं है जिसे आप चालू करते हैं; यह इस बात में एक मौलिक बदलाव है कि रिएक्ट अपडेट और रेंडरिंग को कैसे संभालता है। यह कार्यों को प्राथमिकता देने और UI को प्रतिक्रियाशील बनाए रखने के लिए लंबे समय तक चलने वाले रेंडर्स को बाधित करने की अवधारणा पेश करता है। इसे एक कुशल कंडक्टर की तरह समझें जो एक ऑर्केस्ट्रा का नेतृत्व कर रहा है - विभिन्न उपकरणों (कार्यों) का प्रबंधन करना और एक सामंजस्यपूर्ण प्रदर्शन (उपयोगकर्ता अनुभव) सुनिश्चित करना।
परंपरागत रूप से, रिएक्ट एक सिंक्रोनस रेंडरिंग मॉडल का उपयोग करता था। जब कोई अपडेट होता था, तो रिएक्ट मुख्य थ्रेड को ब्लॉक कर देता था, DOM में परिवर्तनों की गणना करता था, और UI को अपडेट करता था। इससे ध्यान देने योग्य अंतराल हो सकता है, खासकर जटिल घटकों या लगातार अपडेट वाले एप्लिकेशनों में। दूसरी ओर, कॉन्करेंट मोड, रिएक्ट को प्राथमिकता के आधार पर रेंडरिंग कार्यों को रोकने, फिर से शुरू करने या छोड़ने की अनुमति देता है, जो सीधे उपयोगकर्ता सहभागिता को प्रभावित करने वाले कार्यों को उच्च प्राथमिकता देता है, जैसे कि कीबोर्ड इनपुट या बटन क्लिक।
कॉन्करेंट मोड की मुख्य अवधारणाएं
कॉन्करेंट मोड कैसे काम करता है, यह समझने के लिए, निम्नलिखित प्रमुख अवधारणाओं से परिचित होना महत्वपूर्ण है:
1. रिएक्ट फाइबर
फाइबर रिएक्ट की आंतरिक वास्तुकला है जो कॉन्करेंट मोड को संभव बनाती है। यह रिएक्ट के कोर एल्गोरिथम का पुन: कार्यान्वयन है। घटक ट्री को पुनरावर्ती रूप से पार करने और DOM को सिंक्रोनस रूप से अपडेट करने के बजाय, फाइबर रेंडरिंग प्रक्रिया को काम की छोटी इकाइयों में तोड़ देता है जिन्हें रोका, फिर से शुरू किया या छोड़ा जा सकता है। काम की प्रत्येक इकाई को एक फाइबर नोड द्वारा दर्शाया जाता है, जिसमें एक घटक, उसके प्रॉप्स और उसकी स्थिति के बारे में जानकारी होती है।
फाइबर को रिएक्ट की आंतरिक परियोजना प्रबंधन प्रणाली के रूप में सोचें। यह प्रत्येक रेंडरिंग कार्य की प्रगति को ट्रैक करता है और रिएक्ट को प्राथमिकता और उपलब्ध संसाधनों के आधार पर कार्यों के बीच स्विच करने की अनुमति देता है।
2. शेड्यूलिंग और प्राथमिकता
कॉन्करेंट मोड एक परिष्कृत शेड्यूलिंग तंत्र प्रस्तुत करता है जो रिएक्ट को विभिन्न प्रकार के अपडेट को प्राथमिकता देने की अनुमति देता है। अपडेट को इस प्रकार वर्गीकृत किया जा सकता है:
- अत्यावश्यक अपडेट्स: इन अपडेट्स पर तत्काल ध्यान देने की आवश्यकता होती है, जैसे उपयोगकर्ता इनपुट या एनिमेशन। रिएक्ट एक प्रतिक्रियाशील उपयोगकर्ता अनुभव सुनिश्चित करने के लिए इन अपडेट्स को प्राथमिकता देता है।
- सामान्य अपडेट्स: ये अपडेट कम महत्वपूर्ण होते हैं और उपयोगकर्ता अनुभव को महत्वपूर्ण रूप से प्रभावित किए बिना टाले जा सकते हैं। उदाहरणों में डेटा फ़ेचिंग या बैकग्राउंड अपडेट शामिल हैं।
- कम प्राथमिकता वाले अपडेट्स: ये अपडेट सबसे कम महत्वपूर्ण होते हैं और इन्हें और भी लंबी अवधि के लिए विलंबित किया जा सकता है। एक उदाहरण एक ऐसे ग्राफ़ को अपडेट करना होगा जो वर्तमान में स्क्रीन पर दिखाई नहीं दे रहा है।
रिएक्ट इस प्राथमिकता का उपयोग अपडेट को इस तरह से शेड्यूल करने के लिए करता है जो मुख्य थ्रेड को ब्लॉक करने को कम करता है। यह उच्च-प्राथमिकता वाले अपडेट को निम्न-प्राथमिकता वाले अपडेट के साथ मिलाता है, जिससे एक सहज और प्रतिक्रियाशील UI का आभास होता है।
3. इंटरप्टिबल रेंडरिंग
यह कॉन्करेंट मोड का मूल है। इंटरप्टिबल रेंडरिंग रिएक्ट को एक रेंडरिंग कार्य को रोकने की अनुमति देता है यदि कोई उच्च-प्राथमिकता वाला अपडेट आता है। रिएक्ट तब उच्च-प्राथमिकता वाले कार्य पर स्विच कर सकता है, उसे पूरा कर सकता है, और फिर मूल रेंडरिंग कार्य को फिर से शुरू कर सकता है। यह लंबे समय तक चलने वाले रेंडर्स को मुख्य थ्रेड को ब्लॉक करने और UI को अनुत्तरदायी बनाने से रोकता है।
कल्पना कीजिए कि आप एक बड़ा दस्तावेज़ संपादित कर रहे हैं। कॉन्करेंट मोड के साथ, यदि आपको अचानक पृष्ठ को स्क्रॉल करने या एक बटन पर क्लिक करने की आवश्यकता होती है, तो रिएक्ट दस्तावेज़ संपादन प्रक्रिया को रोक सकता है, स्क्रॉलिंग या बटन क्लिक को संभाल सकता है, और फिर बिना किसी ध्यान देने योग्य देरी के दस्तावेज़ का संपादन फिर से शुरू कर सकता है। यह पारंपरिक सिंक्रोनस रेंडरिंग मॉडल पर एक महत्वपूर्ण सुधार है, जहां उपयोगकर्ता की सहभागिता पर प्रतिक्रिया देने से पहले संपादन प्रक्रिया को पूरा करना पड़ता था।
4. टाइम स्लाइसिंग
टाइम स्लाइसिंग एक तकनीक है जिसका उपयोग कॉन्करेंट मोड द्वारा लंबे समय तक चलने वाले रेंडरिंग कार्यों को काम के छोटे-छोटे हिस्सों में विभाजित करने के लिए किया जाता है। काम का प्रत्येक हिस्सा एक छोटे समय के स्लाइस के भीतर निष्पादित होता है, जिससे रिएक्ट समय-समय पर मुख्य थ्रेड को नियंत्रण वापस सौंप सकता है। यह किसी भी एकल रेंडरिंग कार्य को मुख्य थ्रेड को बहुत लंबे समय तक ब्लॉक करने से रोकता है, यह सुनिश्चित करता है कि UI प्रतिक्रियाशील बना रहे।
एक जटिल डेटा विज़ुअलाइज़ेशन पर विचार करें जिसमें बहुत सारी गणनाओं की आवश्यकता होती है। टाइम स्लाइसिंग के साथ, रिएक्ट विज़ुअलाइज़ेशन को छोटे-छोटे हिस्सों में तोड़ सकता है और प्रत्येक हिस्से को एक अलग टाइम स्लाइस में प्रस्तुत कर सकता है। यह विज़ुअलाइज़ेशन को मुख्य थ्रेड को ब्लॉक करने से रोकता है और उपयोगकर्ता को विज़ुअलाइज़ेशन प्रस्तुत करते समय UI के साथ इंटरैक्ट करने की अनुमति देता है।
5. सस्पेंस
सस्पेंस एक घोषणात्मक तरीके से एसिंक्रोनस संचालन, जैसे डेटा फ़ेचिंग, को संभालने के लिए एक तंत्र है। यह आपको एसिंक्रोनस घटकों को <Suspense>
सीमा के साथ लपेटने और एक फॉलबैक UI निर्दिष्ट करने की अनुमति देता है जो डेटा फ़ेच करते समय प्रदर्शित होगा। जब डेटा उपलब्ध होता है, तो रिएक्ट स्वचालित रूप से डेटा के साथ घटक को प्रस्तुत करेगा। सस्पेंस कॉन्करेंट मोड के साथ सहजता से एकीकृत होता है, जिससे रिएक्ट को फॉलबैक UI को प्रस्तुत करने को प्राथमिकता देने की अनुमति मिलती है जबकि डेटा पृष्ठभूमि में फ़ेच किया जा रहा है।
उदाहरण के लिए, आप किसी API से डेटा फ़ेच करते समय एक लोडिंग स्पिनर प्रदर्शित करने के लिए सस्पेंस का उपयोग कर सकते हैं। जब डेटा आता है, तो रिएक्ट स्वचालित रूप से लोडिंग स्पिनर को वास्तविक डेटा से बदल देगा, जिससे एक सहज और निर्बाध उपयोगकर्ता अनुभव प्रदान होगा।
कॉन्करेंट मोड के लाभ
कॉन्करेंट मोड रिएक्ट एप्लिकेशनों के लिए कई महत्वपूर्ण लाभ प्रदान करता है:
- बेहतर प्रतिक्रियाशीलता: रिएक्ट को लंबे समय तक चलने वाले रेंडर्स को बाधित करने और उपयोगकर्ता इंटरैक्शन को प्राथमिकता देने की अनुमति देकर, कॉन्करेंट मोड एप्लिकेशनों को अधिक प्रतिक्रियाशील और इंटरैक्टिव महसूस कराता है।
- उन्नत उपयोगकर्ता अनुभव: डेटा फ़ेच करते समय फॉलबैक UI प्रदर्शित करने और महत्वपूर्ण अपडेट को प्राथमिकता देने की क्षमता एक सहज और अधिक निर्बाध उपयोगकर्ता अनुभव की ओर ले जाती है।
- बेहतर प्रदर्शन: हालांकि कॉन्करेंट मोड आवश्यक रूप से रेंडरिंग को समग्र रूप से तेज़ नहीं बनाता है, यह काम को अधिक समान रूप से वितरित करता है, लंबी अवरुद्ध अवधियों को रोकता है और कथित प्रदर्शन में सुधार करता है।
- सरलीकृत एसिंक्रोनस हैंडलिंग: सस्पेंस एसिंक्रोनस संचालन को संभालने की प्रक्रिया को सरल बनाता है, जिससे डेटा फ़ेचिंग पर निर्भर जटिल एप्लिकेशनों का निर्माण करना आसान हो जाता है।
कॉन्करेंट मोड के उपयोग के मामले
कॉन्करेंट मोड विशेष रूप से निम्नलिखित विशेषताओं वाले एप्लिकेशनों के लिए फायदेमंद है:
- जटिल UI: बड़ी संख्या में घटकों या जटिल रेंडरिंग तर्क वाले एप्लिकेशन।
- लगातार अपडेट्स: ऐसे एप्लिकेशन जिन्हें UI में लगातार अपडेट की आवश्यकता होती है, जैसे रीयल-टाइम डैशबोर्ड या डेटा-गहन एप्लिकेशन।
- एसिंक्रोनस डेटा फ़ेचिंग: ऐसे एप्लिकेशन जो API या अन्य एसिंक्रोनस स्रोतों से डेटा फ़ेच करने पर निर्भर करते हैं।
- एनिमेशन: ऐसे एप्लिकेशन जो उपयोगकर्ता अनुभव को बढ़ाने के लिए एनिमेशन का उपयोग करते हैं।
यहां कुछ विशिष्ट उदाहरण दिए गए हैं कि वास्तविक दुनिया के एप्लिकेशनों में कॉन्करेंट मोड का उपयोग कैसे किया जा सकता है:
- ई-कॉमर्स वेबसाइटें: उत्पाद लिस्टिंग और खोज परिणामों की प्रतिक्रिया में सुधार करें। उत्पाद छवियों और विवरणों को फ़ेच करते समय लोडिंग संकेतक प्रदर्शित करने के लिए सस्पेंस का उपयोग करें।
- सोशल मीडिया प्लेटफ़ॉर्म: उपयोगकर्ता की फ़ीड और सूचनाओं के अपडेट को प्राथमिकता देकर उपयोगकर्ता अनुभव को बढ़ाएँ। एनिमेशन और ट्रांज़िशन को सुचारू रूप से संभालने के लिए कॉन्करेंट मोड का उपयोग करें।
- डेटा विज़ुअलाइज़ेशन डैशबोर्ड: जटिल डेटा विज़ुअलाइज़ेशन को छोटे-छोटे हिस्सों में तोड़कर और उन्हें अलग-अलग टाइम स्लाइस में प्रस्तुत करके उनके प्रदर्शन में सुधार करें।
- सहयोगी दस्तावेज़ संपादक: उपयोगकर्ता इनपुट को प्राथमिकता देकर और मुख्य थ्रेड को ब्लॉक करने से लंबे समय तक चलने वाले संचालन को रोककर एक प्रतिक्रियाशील संपादन अनुभव सुनिश्चित करें।
कॉन्करेंट मोड कैसे सक्षम करें
कॉन्करेंट मोड को सक्षम करने के लिए, आपको React 18 में पेश किए गए नए रूट API में से एक का उपयोग करने की आवश्यकता है:
createRoot
: यह नए एप्लिकेशनों के लिए कॉन्करेंट मोड को सक्षम करने का अनुशंसित तरीका है। यह एक रूट बनाता है जो डिफ़ॉल्ट रूप से कॉन्करेंट मोड का उपयोग करता है।hydrateRoot
: इसका उपयोग सर्वर-साइड रेंडरिंग (SSR) और हाइड्रेशन के लिए किया जाता है। यह आपको एप्लिकेशन को उत्तरोत्तर हाइड्रेट करने की अनुमति देता है, जिससे प्रारंभिक लोड समय में सुधार होता है।
यहां createRoot
का उपयोग करने का एक उदाहरण दिया गया है:
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container); // Create a root.
root.render(<App />);
नोट: कॉन्करेंट मोड का उपयोग करते समय React 18 में ReactDOM.render
को पदावनत कर दिया गया है। इसके बजाय createRoot
या hydrateRoot
का उपयोग करें।
कॉन्करेंट मोड अपनाना: एक क्रमिक दृष्टिकोण
किसी मौजूदा रिएक्ट एप्लिकेशन को कॉन्करेंट मोड में माइग्रेट करना हमेशा एक सीधी प्रक्रिया नहीं होती है। इसके लिए अक्सर सावधानीपूर्वक योजना और एक क्रमिक दृष्टिकोण की आवश्यकता होती है। यहाँ एक सुझाई गई रणनीति है:
- React 18 में अपडेट करें: पहला कदम अपने एप्लिकेशन को React 18 में अपडेट करना है।
- कॉन्करेंट मोड सक्षम करें: कॉन्करेंट मोड को सक्षम करने के लिए
createRoot
याhydrateRoot
का उपयोग करें। - संभावित मुद्दों की पहचान करें: उन घटकों की पहचान करने के लिए रिएक्ट देवटूल्स प्रोफाइलर का उपयोग करें जो प्रदर्शन में बाधा या अप्रत्याशित व्यवहार का कारण बन रहे हैं।
- संगतता मुद्दों का समाधान करें: कुछ तृतीय-पक्ष लाइब्रेरी या पुराने रिएक्ट पैटर्न कॉन्करेंट मोड के साथ पूरी तरह से संगत नहीं हो सकते हैं। आपको इन पुस्तकालयों को अपडेट करने या इन मुद्दों को हल करने के लिए अपने कोड को रीफैक्टर करने की आवश्यकता हो सकती है।
- सस्पेंस लागू करें: एसिंक्रोनस संचालन को संभालने और उपयोगकर्ता अनुभव को बेहतर बनाने के लिए सस्पेंस का उपयोग करें।
- पूरी तरह से परीक्षण करें: यह सुनिश्चित करने के लिए अपने एप्लिकेशन का पूरी तरह से परीक्षण करें कि कॉन्करेंट मोड उम्मीद के मुताबिक काम कर रहा है और कार्यक्षमता या प्रदर्शन में कोई प्रतिगमन नहीं है।
संभावित चुनौतियाँ और विचार
हालांकि कॉन्करेंट मोड महत्वपूर्ण लाभ प्रदान करता है, कुछ संभावित चुनौतियों और विचारों से अवगत होना महत्वपूर्ण है:
- संगतता मुद्दे: जैसा कि पहले उल्लेख किया गया है, कुछ तृतीय-पक्ष लाइब्रेरी या पुराने रिएक्ट पैटर्न कॉन्करेंट मोड के साथ पूरी तरह से संगत नहीं हो सकते हैं। आपको इन पुस्तकालयों को अपडेट करने या इन मुद्दों को हल करने के लिए अपने कोड को रीफैक्टर करने की आवश्यकता हो सकती है। इसमें कुछ जीवनचक्र विधियों को फिर से लिखना या React 18 द्वारा प्रदान किए गए नए API का उपयोग करना शामिल हो सकता है।
- कोड जटिलता: कॉन्करेंट मोड आपके कोडबेस में जटिलता जोड़ सकता है, खासकर जब एसिंक्रोनस संचालन और सस्पेंस से निपटते हैं। अंतर्निहित अवधारणाओं को समझना और अपने कोड को इस तरह से लिखना महत्वपूर्ण है जो कॉन्करेंट मोड के अनुकूल हो।
- डीबगिंग: कॉन्करेंट मोड एप्लिकेशनों को डीबग करना पारंपरिक रिएक्ट एप्लिकेशनों को डीबग करने की तुलना में अधिक चुनौतीपूर्ण हो सकता है। रिएक्ट देवटूल्स प्रोफाइलर प्रदर्शन बाधाओं की पहचान करने और कॉन्करेंट मोड के व्यवहार को समझने के लिए एक मूल्यवान उपकरण है।
- सीखने की अवस्था: कॉन्करेंट मोड से जुड़ी एक सीखने की अवस्था है। डेवलपर्स को इसका प्रभावी ढंग से उपयोग करने के लिए नई अवधारणाओं और API को समझने की आवश्यकता है। कॉन्करेंट मोड और इसकी सर्वोत्तम प्रथाओं के बारे में जानने में समय लगाना आवश्यक है।
- सर्वर-साइड रेंडरिंग (SSR): सुनिश्चित करें कि आपका SSR सेटअप कॉन्करेंट मोड के साथ संगत है। सर्वर रेंडरिंग के बाद क्लाइंट-साइड पर एप्लिकेशन को ठीक से हाइड्रेट करने के लिए
hydrateRoot
का उपयोग करना महत्वपूर्ण है।
कॉन्करेंट मोड के लिए सर्वोत्तम अभ्यास
कॉन्करेंट मोड से अधिकतम लाभ उठाने के लिए, इन सर्वोत्तम प्रथाओं का पालन करें:
- घटकों को छोटा और केंद्रित रखें: छोटे घटकों को प्रस्तुत करना और अपडेट करना आसान होता है, जिससे प्रदर्शन में सुधार हो सकता है। बड़े घटकों को छोटी, अधिक प्रबंधनीय इकाइयों में तोड़ें।
- रेंडर में साइड इफेक्ट्स से बचें: रेंडर विधि में सीधे साइड इफेक्ट्स (जैसे, डेटा फ़ेचिंग, DOM हेरफेर) करने से बचें। साइड इफेक्ट्स के लिए
useEffect
हुक का उपयोग करें। - रेंडरिंग प्रदर्शन को अनुकूलित करें: अनावश्यक री-रेंडर को रोकने के लिए मेमोइज़ेशन (
React.memo
), shouldComponentUpdate, और PureComponent जैसी तकनीकों का उपयोग करें। - एसिंक्रोनस संचालन के लिए सस्पेंस का उपयोग करें: डेटा फ़ेच करते समय एक फॉलबैक UI प्रदान करने के लिए
<Suspense>
सीमाओं के साथ एसिंक्रोनस घटकों को लपेटें। - अपने एप्लिकेशन को प्रोफाइल करें: प्रदर्शन बाधाओं की पहचान करने और अपने कोड को अनुकूलित करने के लिए रिएक्ट देवटूल्स प्रोफाइलर का उपयोग करें।
- पूरी तरह से परीक्षण करें: यह सुनिश्चित करने के लिए अपने एप्लिकेशन का पूरी तरह से परीक्षण करें कि कॉन्करेंट मोड उम्मीद के मुताबिक काम कर रहा है और कार्यक्षमता या प्रदर्शन में कोई प्रतिगमन नहीं है।
रिएक्ट और कॉन्करेंट मोड का भविष्य
कॉन्करेंट मोड रिएक्ट के विकास में एक महत्वपूर्ण कदम का प्रतिनिधित्व करता है। यह प्रतिक्रियाशील और इंटरैक्टिव यूजर इंटरफेस बनाने के लिए नई संभावनाएं खोलता है। जैसे-जैसे रिएक्ट विकसित होता जा रहा है, हम उम्मीद कर सकते हैं कि कॉन्करेंट मोड के शीर्ष पर और भी उन्नत सुविधाएँ और अनुकूलन बनाए जाएंगे। रिएक्ट का उपयोग लैटिन अमेरिका से लेकर दक्षिण पूर्व एशिया तक विविध वैश्विक संदर्भों में तेजी से किया जा रहा है। यह सुनिश्चित करना महत्वपूर्ण है कि रिएक्ट एप्लिकेशन अच्छा प्रदर्शन करें, खासकर कम-शक्ति वाले उपकरणों और धीमी नेटवर्क कनेक्शन पर जो दुनिया के कई हिस्सों में प्रचलित हैं।
प्रदर्शन के प्रति रिएक्ट की प्रतिबद्धता, कॉन्करेंट मोड की शक्ति के साथ मिलकर, इसे आधुनिक वेब एप्लिकेशन बनाने के लिए एक आकर्षक विकल्प बनाती है जो दुनिया भर के उपयोगकर्ताओं को एक शानदार उपयोगकर्ता अनुभव प्रदान करते हैं। जैसे-जैसे अधिक डेवलपर्स कॉन्करेंट मोड को अपनाएंगे, हम उम्मीद कर सकते हैं कि रिएक्ट एप्लिकेशनों की एक नई पीढ़ी देखेंगे जो अधिक प्रतिक्रियाशील, प्रदर्शनकारी और उपयोगकर्ता-अनुकूल हैं।
निष्कर्ष
रिएक्ट कॉन्करेंट मोड सुविधाओं का एक शक्तिशाली सेट है जो इंटरप्टिबल रेंडरिंग, अपडेट की प्राथमिकता और एसिंक्रोनस संचालन के बेहतर प्रबंधन को सक्षम बनाता है। कॉन्करेंट मोड की प्रमुख अवधारणाओं को समझकर और सर्वोत्तम प्रथाओं का पालन करके, आप रिएक्ट की पूरी क्षमता को अनलॉक कर सकते हैं और ऐसे एप्लिकेशन बना सकते हैं जो दुनिया भर के उपयोगकर्ताओं के लिए एक सहज और अधिक प्रतिक्रियाशील उपयोगकर्ता अनुभव प्रदान करते हैं। कॉन्करेंट मोड को अपनाएं और रिएक्ट के साथ वेब का भविष्य बनाना शुरू करें!