← Back to React Course | Chapter 3: Components & Props | Lesson 9 of 11

Conditional और Optional Props

Optional props एक pizza पर toppings जैसे हैं -- कुछ इसे pizza मानने के लिए required हैं, और दूसरे आप पूरी तरह छोड़ सकते हैं।
Syntax
markup
function ComponentName({ requiredProp, optionalProp }) {
  return (
    <div>
      {requiredProp}
      {optionalProp && <span>{optionalProp}</span>}
      {optionalProp ?? "fallback"}
    </div>
  );
}

एक Optional Prop Handle करना

एक prop optional सिर्फ caller को इसे pass करने की ज़रूरत न रख कर होता है -- component के अंदर, आप इसे use करने से पहले check करते हैं कि यह exist करता है या नहीं, अक्सर एक default value या एक conditional check के साथ।

यह एक component को actually provided क्या था उसके आधार पर अपना behavior adapt करने देता है।

Note: Optional props को default values के साथ combine करें ताकि आपको component भर में repetitive if checks की ज़रूरत न पड़े।
Warning: एक optional prop पर एक property access करना जो undefined हो सकती है (जैसे props.user.name जब user pass नहीं हुआ) एक error throw करेगा।

उदाहरण: Handling an Optional Prop

markup
<!DOCTYPE html>
<html>
<head>
  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
  <div id="root"></div>
  <script type="text/babel">
    function UserGreeting({ name, subtitle }) {
      return (
        <div>
          <h2>Hello, {name}!</h2>
          {subtitle && <p>{subtitle}</p>}
        </div>
      );
    }
    function App() {
      return <div><UserGreeting name="Sam" subtitle="Welcome back" /><UserGreeting name="Alex" /></div>;
    }
    ReactDOM.createRoot(document.getElementById('root')).render(<App />);
  </script>
</body>
</html>

Props के आधार पर Conditionally Render करना

एक component वही conditional rendering techniques (ternaries, &&) जो पहले cover की गई हैं उपयोग करते हुए यह change कर सकता है कि क्या render करना है इसके आधार पर कि कौन से props pass किए गए थे।

यह उन components के लिए खासतौर पर useful है जो अलग situations में थोड़ा अलग UI दिखाते हैं, जैसे एक logged-in बनाम logged-out state।

Note: Complex conditions को return statement से पहले एक named variable में extract करके conditional rendering logic को readable रखें।
Warning: JSX के अंदर deeply nested conditional rendering जल्दी पढ़ना hard हो जाता है -- बहुत अलग states के लिए early returns पर विचार करें।

उदाहरण: Conditionally Rendering Based on Props

markup
<!DOCTYPE html>
<html>
<head>
  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
  <div id="root"></div>
  <script type="text/babel">
    function StatusMessage({ isError, message }) {
      if (isError) {
        return <p style={{color: "red"}}>Error: {message}</p>;
      }
      return <p style={{color: "green"}}>{message}</p>;
    }
    function App() {
      return <div><StatusMessage isError={true} message="Failed to load" /><StatusMessage isError={false} message="All good" /></div>;
    }
    ReactDOM.createRoot(document.getElementById('root')).render(<App />);
  </script>
</body>
</html>

Fallback Content वाले Optional Props

कभी-कभी एक optional prop को missing होने पर कुछ भी नहीं के बजाय alternate fallback content दिखाना चाहिए। Ternary operator यहां अच्छे से काम करता है, आपको एक चीज़ render करने देते हुए जब prop present हो और कुछ और जब यह न हो।

Note: props.value ?? 'default text' (nullish coalescing operator) का उपयोग missing values के लिए fallback content supply करने के एक concise तरीके के रूप में करें।
Warning: fallbacks के लिए ?? के बजाय || उपयोग करना 0 या एक empty string जैसी legitimate falsy values पर misfire कर सकता है।

उदाहरण: Optional Props with Fallback Content

markup
<!DOCTYPE html>
<html>
<head>
  <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
  <div id="root"></div>
  <script type="text/babel">
    function ProfileBio({ bio }) {
      return <p>{bio ? bio : "This user hasn't written a bio yet."}</p>;
    }
    function App() {
      return <div><ProfileBio bio="I love building with React." /><ProfileBio /></div>;
    }
    ReactDOM.createRoot(document.getElementById('root')).render(<App />);
  </script>
</body>
</html>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. PropTypes/TypeScript से एक prop को required मार्क करना लेकिन फिर भी code लिखना जो मानता है कि यह missing हो सकता है।
  2. एक optional prop के लिए fallback provide न करना, जिससे access होने पर undefined होने पर crash होता है।
  3. हर single prop को optional बनाना भले ही कुछ genuinely component के sense बनाने के लिए हमेशा provided होने चाहिए।
चैप्टर सारांश
  • एक component जो हर prop accept करता है उसे required होने की ज़रूरत नहीं।
  • Optional props के पास sensible defaults या safe fallback handling होनी चाहिए।
  • एक component के अंदर conditional logic अक्सर इस पर depend करता है कि एक optional prop provided था या नहीं।
  • Required बनाम optional props को clearly distinguish करना एक component को correctly use करना आसान बनाता है।
ब्राउज़र सपोर्ट

कोई browser-specific restrictions नहीं -- optional props standard JavaScript conditional logic पर rely करते हैं।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.