DEV Community

banti kevat
banti kevat

Posted on • Originally published at itinfohubs.blogspot.com

React me Ternary Operator vs Short-Circuit Rendering Kya Hai

React me Ternary Operator vs Short-Circuit Rendering Kya Hai (in Hindi)
React me Ternary Operator vs Short-Circuit Rendering kya hai? Is complete Hindi guide me conditional rendering ke dono patterns ko code ke sath seekhein.

हेल्पफुल और प्रैक्टिकल कोडिंग वर्ल्ड में आपका स्वागत है, मेरे दोस्त! अगर आप ReactJS सीख रहे हैं, तो आपने एक बात ज़रूर नोटिस की होगी कि हमारे नॉर्मल JavaScript वाले if-else कंडीशन्स JSX के अंदर सीधे काम नहीं करते। ऐसा इसलिए होता है क्योंकि JSX केवल Expressions को समझता है, Statements को नहीं।

जब भी हमें React components में कंडीशन के आधार पर अलग-अलग UI दिखाना होता है, तब हमारे पास दो सबसे बड़े हथियार आते हैं: Ternary Operator (? :) और Short-Circuit Evaluation (&&)। आज हम इन दोनों के बीच के अंतर, इनके इस्तेमाल के सही तरीके, कुछ बेहद खतरनाक Common Bugs, और बेस्ट प्रैक्टिसेस को बिल्कुल गहराई से समझेंगे। अपनी कॉफ़ी तैयार कर लीजिए और चलिए इस मास्टर-क्लास को शुरू करते हैं!

⚡ Quick Answer: React me Ternary Operator vs Short-Circuit Rendering का मुख्य अंतर यह है कि Ternary Operator (? :) का इस्तेमाल तब करते हैं जब True और False दोनों कंडीशन्स के लिए अलग UI रेंडर करना हो, जबकि Short-Circuit (&&) का इस्तेमाल सिर्फ तब होता है जब Condition True होने पर ही कोई UI एलिमेंट दिखाना हो।

---

React में Conditional Rendering क्या है और इसकी ज़रूरत क्यों है?

दोस्त, जब हम एक डायनामिक वेब एप्लीकेशन बनाते हैं, तो हमारा UI हमेशा एक जैसा नहीं रहता। वह यूजर के एक्शन, API रिस्पॉन्स या ऐप की स्टेट (State) के हिसाब से बदलता रहता है। उदाहरण के लिए:

  • अगर यूजर Logged In है, तो उसे "Logout" बटन दिखाओ, नहीं तो "Login" बटन दिखाओ।
  • अगर यूजर के पास कोई अनरीड नोटिफिकेशन है, तो स्क्रीन पर लाल रंग का नोटिफिकेशन बैज (Badge) दिखाओ।
  • जब तक डेटा सर्वर से लोड हो रहा है, तब तक "Loading Spinner" दिखाओ, और लोड होने के बाद एक्चुअल कंटेंट दिखाओ।

React में इस चीज़ को हासिल करने के लिए हम Conditional Rendering का इस्तेमाल करते हैं।

JSX Expressions vs JavaScript Statements

ध्यान देने वाली बात ये है कि JSX असल में बैकग्राउंड में React.createElement() में कम्पाइल होता है। इसका मतलब है कि JSX के घुंघराले कोष्ठक (Curly Braces {}) के अंदर हम केवल वही कोड लिख सकते हैं जो कोई वैल्यू रिटर्न करता हो, जिसे हम JavaScript Expression कहते हैं।

हम JSX के बीच में इस तरह का कोड नहीं लिख सकते:

{/* यह कोड एरर देगा क्योंकि if-else एक Statement है, Expression नहीं */}

  {if (isLoggedIn) {
    <p>Welcome Back!</p>
  }}


Enter fullscreen mode Exit fullscreen mode

इस सीमा को पार करने के लिए और सुंदर, क्लीन कोड लिखने के लिए हम Ternary Operator और Short-Circuit का सहारा लेते हैं। आधिकारिक तौर पर इसे समझने के लिए आप React Documentation को भी देख सकते हैं।

---

Ternary Operator (? :) क्या है और React में इसे कैसे Use करें?

Ternary Operator JavaScript का एकमात्र ऐसा ऑपरेटर है जो तीन ऑपरेंड्स (Operands) लेता है। इसे हम if-else का शॉर्ट-हैंड या छोटा भाई भी कह सकते हैं।

Ternary Operator का Syntax:

condition ? expressionIfTrue : expressionIfFalse
Enter fullscreen mode Exit fullscreen mode
  • condition: वह शर्त जिसे आप चेक करना चाहते हैं (यह True या False होगी)।
  • ? (Question Mark): इसके बाद का कोड तब चलेगा जब कंडीशन True होगी।
  • : (Colon): इसके बाद का कोड तब चलेगा जब कंडीशन False होगी।

Ternary Operator का एक Production-Ready Example:

मान लीजिए हम एक यूजर प्रोफाइल हेडर बना रहे हैं जहां यूजर के लॉगिन स्टेटस के हिसाब से हमें बटन दिखाना है। चलिए इसका पूरा कोड देखते हैं:

import React, { useState } from 'react';

function UserProfile() {
  const [isLoggedIn, setIsLoggedIn] = useState(false);

  const toggleLogin = () => {
    setIsLoggedIn(prevStatus => !prevStatus);
  };

  return (
    <div style={{ padding: '20px', fontFamily: 'Arial, sans-serif' }}>
      <h2>Ternary Operator Demo</h2>

      {/* Ternary Operator का इस्तेमाल */}
      <div style={{ margin: '20px 0', padding: '15px', border: '1px solid #ccc', borderRadius: '8px' }}>
        {isLoggedIn ? (
          <div>
            <h3 style={{ color: 'green' }}>Welcome Back, Premium User! 🎉</h3>
            <p>Your subscription is active until next month.</p>
          </div>
        ) : (
          <div>
            <h3 style={{ color: 'red' }}>Please Log In 🔒</h3>
            <p>Log in to access your dashboard and premium tools.</p>
          </div>
        )}
      </div>

      <button 
        onClick={toggleLogin} 
        style={{
          padding: '10px 20px', 
          backgroundColor: isLoggedIn ? '#dc2626' : '#2563eb', 
          color: '#ffffff',
          border: 'none',
          borderRadius: '5px',
          cursor: 'pointer',
          fontWeight: 'bold'
        }}
      >
        {isLoggedIn ? 'Log Out' : 'Log In'}
      </button>
    </div>
  );
}

export default UserProfile;

Enter fullscreen mode Exit fullscreen mode

ऊपर दिए गए कोड में, हमने दो जगह Ternary Operator का इस्तेमाल किया है:

  1. UI ब्लॉक को रेंडर करने के लिए (Line 14): अगर isLoggedIn ट्रू है तो वेलकम मैसेज दिखेगा, नहीं तो लॉगिन मैसेज दिखेगा।
  2. बटन के स्टाइल और टेक्स्ट को डायनामिक बनाने के लिए (Line 31 और 41): बटन का बैकग्राउंड कलर और टेक्स्ट भी स्टेट के हिसाब से बदल रहा है।

---

Short-Circuit Evaluation (&&) क्या है और React में इसका Use कब करें?

अब बात करते हैं हमारे दूसरे महारथी की, जिसे हम Short-Circuit Evaluation या Logical AND (&&) Rendering कहते हैं।

JavaScript में, logical AND operator (&&) लेफ्ट-टू-राइट काम करता है। यह तब काम आता है जब आपको सिर्फ एक ही कंडीशन चेक करनी हो—यानी "अगर यह कंडीशन True है, तो ही इस कंपोनेंट को दिखाओ, वरना कुछ मत दिखाओ"

Short-Circuit का Syntax:

condition && expressionIfTrue
Enter fullscreen mode Exit fullscreen mode

JavaScript का नियम यह है कि यदि पहला ऑपरेंड (condition) Falsy है, तो वह आगे चेक ही नहीं करता (Short-Circuit हो जाता है) और तुरंत रुक जाता है। लेकिन अगर पहला ऑपरेंड Truthy है, तो वह दूसरे ऑपरेंड (expressionIfTrue) को रिटर्न कर देता है। React इस रिटर्न की गई JSX वैल्यू को सीधे स्क्रीन पर रेंडर कर देता है।

Short-Circuit Rendering का Production-Ready Example:

मान लीजिए हमारे पास एक शॉपिंग कार्ट है, और हम चाहते हैं कि अगर यूजर के कार्ट में आइटम्स हैं, तभी "Checkout" बटन दिखाई दे। अगर कार्ट खाली है, तो बटन पूरी तरह से गायब रहे।

import React, { useState } from 'react';

function ShoppingCart() {
  const [cartItems, setCartItems] = useState(['Laptop', 'Wireless Mouse']);

  const clearCart = () => {
    setCartItems([]);
  };

  const fillCart = () => {
    setCartItems(['Laptop', 'Wireless Mouse', 'Keyboard']);
  };

  return (
    <div style={{ padding: '20px', fontFamily: 'Arial, sans-serif' }}>
      <h2>Short-Circuit Rendering Demo (&amp;&amp;)</h2>

      <p>Items in your cart: <strong>{cartItems.length}</strong></p>

      {/* Short-Circuit Rendering का इस्तेमाल */}
      {cartItems.length > 0 && (
        <div style={{ background: '#f0fdf4', padding: '15px', border: '1px solid #bbf7d0', borderRadius: '8px', margin: '15px 0' }}>
          <h4 style={{ color: '#16a34a', margin: '0 0 10px 0' }}>Congratulations! You are eligible for Free Shipping! 🚚</h4>
          <button style={{ padding: '8px 16px', background: '#16a34a', color: '#fff', border: 'none', borderRadius: '4px', cursor: 'pointer' }}>
            Proceed to Checkout
          </button>
        </div>
      )}

      <div style={{ marginTop: '20px' }}>
        <button onClick={clearCart} style={{ marginRight: '10px', padding: '8px 12px' }}>Clear Cart</button>
        <button onClick={fillCart} style={{ padding: '8px 12px' }}>Refill Cart</button>
      </div>
    </div>
  );
}

export default ShoppingCart;

Enter fullscreen mode Exit fullscreen mode

इस उदाहरण में, जब तक cartItems.length > 0 ट्रू रहेगा, तब तक Green Box और "Proceed to Checkout" बटन रेंडर होता रहेगा। जैसे ही हम "Clear Cart" पर क्लिक करेंगे, कंडीशन फॉल्स हो जाएगी, और वह पूरा डिब ब्लॉक रेंडर होना बंद हो जाएगा।

---

React me Ternary Operator vs Short-Circuit Rendering में क्या अंतर है?

इन दोनों टूल्स को समझने के बाद, अब यह जानना ज़रूरी है कि कब किसका इस्तेमाल करना बेस्ट प्रैक्टिस माना जाता है। नीचे दी गई टेबल आपको दोनों की तुलना आसानी से समझाएगी:

Feature Ternary Operator (? :) Short-Circuit (&&)
Primary Use Case जब 'If' और 'Else' दोनों कंडीशन्स के लिए अलग-अलग UI दिखाना हो। जब सिर्फ 'If' कंडीशन के लिए UI दिखाना हो (False होने पर कुछ नहीं)।
Syntax Complexity मध्यम (Medium) - इसमें 3 भाग होते हैं (Condition, True, False)। बेहद आसान (Very Simple) - इसमें सिर्फ 2 भाग होते हैं।
Falsy Evaluation False कंडीशन होने पर वैकल्पिक (Alternative) JSX रिटर्न करता है। False होने पर आगे का JSX रेंडर नहीं करता (परंतु 0/NaN के केस में बग दे सकता है)।
Readability लंबी या नेस्टेड कंडीशन्स में कोड उलझा हुआ और गंदा हो सकता है। काफी साफ-सुथरा (Clean) और पढ़ने में आसान लगता है।

चैंपियन डेवलपर्स की तरह सोचने के लिए इस डिसीजन फ्लो डायग्राम को देखें, जो आपको हमेशा याद दिलाएगा कि कब क्या इस्तेमाल करना है:

🏗️ Conditional Rendering Flow

Check Condition

Need 'Else' block?

YES: Use Ternary (? :)
or
NO: Use Short-Circuit (&&)

Diagram: React render method core decision tree for conditions

---

खतरनाक Edge Cases और UI Bugs (और उन्हें कैसे Fix करें?)

दोस्त, अब मैं आपके साथ अपनी लाइफ का वो सीक्रेट शेयर कर रहा हूँ जिसके कारण जूनियर डेवलपर्स अक्सर प्रोडक्शन में रातों की नींद खराब कर लेते हैं। React में कंडीशनल रेंडरिंग करते समय कुछ बड़े छिपे हुए error और बग्स आते हैं।

1. द ड्रेडफुल "0" Bug (The Falsy Number Issue)

मान लीजिए आपके पास एक पोस्ट लिस्ट है और आप चाहते हैं कि जब कोई पोस्ट न हो, तो कुछ रेंडर न हो। आप इस तरह का कोड लिखते हैं:

const posts = [];

return (
  <div>
    {posts.length && <PostList posts={posts} />}
  </div>
);

Enter fullscreen mode Exit fullscreen mode

आपको लगेगा कि स्क्रीन पर कुछ नहीं दिखेगा। लेकिन जैसे ही आप कोड रन करेंगे, स्क्रीन पर एक बड़ा सा 0 रेंडर हो जाएगा! ऐसा क्यों हुआ?

वजह: JavaScript में 0 एक Falsy वैल्यू है। जब logical && को पहली वैल्यू 0 मिलती है, तो वह उसे Falsy मानकर वहीं रुक जाता है और उस 0 को ही रिटर्न कर देता है। React को जब 0 मिलता है, तो वह उसे एक वैलिड नंबर मानकर स्क्रीन पर प्रिंट कर देता है (क्योंकि React false, null, और undefined को रेंडर नहीं करता, पर 0 को करता है)।

Solution (इसे कैसे ठीक करें?):

इसे ठीक करने के दो सबसे बेहतरीन तरीके हैं:

{/* तरीका 1: कंडीशन को explicit boolean बनाएं */}
{posts.length > 0 && <PostList posts={posts} />}

{/* तरीका 2: Boolean constructor या Double NOT (!!) का इस्तेमाल करें */}
{!!posts.length && <PostList posts={posts} />}

Enter fullscreen mode Exit fullscreen mode

2. Undefined या Null ऑब्जेक्ट एक्सेस बग

कभी-कभी हमारा डेटा API से लोड हो रहा होता है और वह शुरू में null या undefined होता है। अगर हम सीधे उसकी प्रॉपर्टी को एक्सेस करने की कोशिश करेंगे, तो हमारी एप्लीकेशन क्रैश हो जाएगी।

// यह कोड ऐप क्रैश कर देगा अगर user null है!
<div>{user.name && <p>{user.name}</p>}</div>

Enter fullscreen mode Exit fullscreen mode

Solution:

इसके लिए हमेशा Optional Chaining (?.) और Short-Circuit का कॉम्बो इस्तेमाल करें:

<div>{user?.name && <p>{user.name}</p>}</div>

Enter fullscreen mode Exit fullscreen mode

---

Best Practices for Clean and Scalable Code

एक सीनियर डेवलपर के तौर पर, मैं आपको कुछ गोल्डन रूल्स बता रहा हूँ जो आपके कोड को हमेशा मेन्टेननेबल और रीडेबल रखेंगे:

  1. नेस्टेड टर्नरी ऑपरेटर (Nested Ternaries) से बचें: एक टर्नरी के अंदर दूसरा टर्नरी ऑपरेटर लिखना सबसे खराब कोडिंग है। यह कोड को 'Spaghetti Code' बना देता है। अगर आपकी कंडीशन्स बहुत ज़्यादा हैं, तो switch-case का इस्तेमाल करें या फिर उस लॉजिक को एक अलग हेल्पर फंक्शन में डाल दें।
  2. जटिल कंडीशन्स को वेरिएबल्स में स्टोर करें: अगर आपकी कंडीशन लंबी है (जैसे: isUserLoggedIn && hasPremiumLicense && isDeviceRegistered), तो उसे सीधे JSX में लिखने के बजाय एक मीनिंगफुल वेरिएबल में स्टोर कर लें:
const showPremiumFeature = isLoggedIn && isPremiumUser;
return <div>{showPremiumFeature && <PremiumDashboard />}</div>;
Enter fullscreen mode Exit fullscreen mode
  1. कंपोनेंट एक्सट्रैक्शन (Component Extraction): अगर कंडीशंस के अंदर बहुत बड़ा HTML ब्लॉक रेंडर हो रहा है, तो उस ब्लॉक को निकालकर एक नया छोटा कंपोनेंट बना लें। इससे मुख्य फ़ाइल साफ़ और छोटी रहती है।

---

तो दोस्तों, हमने आज विस्तार से सीखा कि React में कंडीशन के साथ सुंदर UI कैसे रेंडर करते हैं। संक्षेप में कहें तो, जब हमें 'यह या वह' (Alternative) चुनना हो तब Ternary Operator (? :) हमारा सच्चा साथी है, और जब हमें 'सिर्फ यह' (Conditional visibility) दिखाना हो तो Short-Circuit (&&) सबसे स्मार्ट चॉइस है। हमेशा ज़ीरो-बग (0 bug) का ध्यान रखें और साफ सुथरा कोड लिखते रहें!

Frequently Asked Questions (FAQs)

Q1: React में if-else का इस्तेमाल डायरेक्ट JSX के अंदर क्यों नहीं किया जा सकता?
React का JSX बैकग्राउंड में JavaScript Objects और function calls (React.createElement) में बदल जाता है। JSX के कर्ली ब्रेसेस {}\ केवल expressions को स्वीकार करते हैं जो कोई वैल्यू रिटर्न करते हैं। चूंकि if\-else\ एक statement है न कि expression, इसलिए यह JSX के अंदर डायरेक्ट काम नहीं करता। इसके बजाय हमें Ternary Operator या Short-Circuit का इस्तेमाल करना पड़ता है।
Q2: Short-circuit rendering में स्क्रीन पर '0' क्यों प्रिंट हो जाता है?
JavaScript में \&\&\ ऑपरेटर पहले Falsy वैल्यू को रिटर्न कर देता है। जब हम array.length \&\& \ लिखते हैं और ऐरे खाली होता है, तो array.length\ की वैल्यू 0 (Falsy) होती है। React false\ या undefined\ को रेंडर नहीं करता है, लेकिन 0\ को एक वैलिड नंबर मानकर स्क्रीन पर रेंडर कर देता है। इससे बचने के लिए array.length \> 0 \&\& ...\ का इस्तेमाल करना चाहिए।
Q3: Nested Ternary Operators का इस्तेमाल करना क्यों गलत माना जाता है?
एक टर्नरी ऑपरेटर के अंदर दूसरा टर्नरी ऑपरेटर लिखने से कोड की रीडेबिलिटी (Readability) बहुत खराब हो जाती है। इसे डिबग करना और टेस्ट करना मुश्किल हो जाता है। ऐसी स्थिति में कंडीशनल लॉजिक को JSX से बाहर निकालकर अलग फंक्शन्स या सब-कंपोनेंट्स में रखना चाहिए।
Q4: Short-Circuit (&&) का सबसे बेस्ट यूज़ केस क्या है?
इसका सबसे अच्छा इस्तेमाल तब होता है जब आपको कंडीशन True होने पर ही कुछ दिखाना हो और False होने पर पूरी तरह से खाली (Nothing / null) रखना हो। उदाहरण के लिए: नोटिफिकेशन अलर्ट्स, वार्निंग बैनर्स, या एडमिन-ओनली बटन्स।
Q5: क्या हम Nullish Coalescing (??) का इस्तेमाल भी React Rendering में कर सकते हैं?
हाँ, Nullish Coalescing (??) ऑपरेटर का उपयोग तब किया जाता है जब आप केवल null\ या undefined\ होने पर ही कोई डिफॉल्ट फॉलबैक वैल्यू दिखाना चाहते हैं, लेकिन 0\ या खाली स्ट्रिंग ""\ को वैलिड वैल्यू मानकर रेंडर करना चाहते हैं।

Top comments (0)