Server Components सिर्फ server पर चलते हैं, request या build के वक्त, और अपना code कभी browser तक नहीं भेजते; वे सीधे किसी database query का await कर सकते हैं पर state, effects या event handlers इस्तेमाल नहीं कर सकते। Client Components पर use client लिखा होता है, वे browser में hydrate होते हैं और interactivity संभालते हैं। डिफॉल्ट server रखिए, और client की सीमा को पेड़ में जितना नीचे धकेल सकें, धकेलिए।
इंटरव्यूअर यह क्यों पूछते हैं
App Router पर काम अब आम है और बहुत से कैंडिडेट ने उसके बारे में सिर्फ पढ़ा होता है। इंटरव्यूअर जानना चाहते हैं कि आप वह सीमा समझते हैं या नहीं: browser तक असल में कौन सा code जाता है, serialization की रेखा कौन सी चीज पार कर सकती है, और bundle के आकार के लिए डिफॉल्ट क्यों मायने रखता है। वे यह भी सुन रहे होते हैं कि आपको server पर render हुए children को client component में भेजने वाली तरकीब पता है या नहीं।
अपना जवाब कैसे स्ट्रक्चर करें
- इससे शुरू करें कि हर एक कहां चलता है और browser तक क्या जाता है।
- ठोस सीमाएं गिनाएं: कोई hooks नहीं, कोई event handlers नहीं, सिर्फ serializable props।
- अपना डिफॉल्ट बताएं और वह वजह जिस पर आप सीमा पार करते हैं।
- server पर render हुए children को client shell में भेजने का जिक्र करें।
उदाहरण जवाब
मैं इसे ऐसे सोचता हूं कि Server Components data लाने और markup बनाने के लिए हैं, और Client Components हर उस चीज के लिए जिसे user छूता है। Server Component server पर चलता है, तो मैं उसके अंदर ही किसी query का await कर सकता हूं, और वह code या उसकी dependencies browser bundle में जाती ही नहीं। बदले में सौदा यह है कि न useState, न useEffect, न onClick। जिस पल मुझे इनमें से कोई चाहिए, मैं उस file के ऊपर use client लगा देता हूं, और वह जो कुछ import करती है वह भी client bundle में शामिल हो जाता है। तो मेरा डिफॉल्ट server है और मैं सीमा को जितना नीचे धकेल सकूं, धकेलता हूं। मेरे पिछले project में एक dashboard था जहां सिर्फ filter dropdown और chart का tooltip interactive थे, तो वे दो छोटे client components बने और बाकी page, जिसमें एक काफी भारी markdown renderer भी था, server पर ही रहा। लोग जिस चीज पर फिसलते हैं वह यह कि सीमा पार करने वाले props का serializable होना जरूरी है, तो आप कोई function नीचे नहीं भेज सकते। मैं उसकी जगह server पर render हुए children को client shell में भेजने वाला pattern इस्तेमाल करता हूं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- server से client की सीमा के आर पार आप props के तौर पर क्या भेज सकते हैं?
- server पर render हुए page के अलग अलग हिस्सों में बैठे दो client components state कैसे साझा करते हैं?
- अगर आप किसी server only module को client component में import कर दें तो क्या होता है?
React डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें