اذهب إلى المحتوى

السؤال

نشر

هل توجد طريقة لعمل جملة if else  في داخل دالة render مثلًا بهذا الشكل:

render(){
    return (
        <div>
            if (this.props.found) {<h1>Some Content</h1>}
            else {<h1>Not Found<h1/>}
        </div>
    )
}

بالطبع الكود السابق لن يعمل، لكني أحاول عمل شيء كهذا بدلًا من عمل جملتين return واحدة في داخل if وواحدة في else بالشكل التالي:

render(){
  if (this.props.found) {
    return (
        <div>
            <h1>Some Content</h1>
        </div>
    )
  } else {
    return (
      <div>
      <h1>Not Found</h1>
      </div>
    )
  }
}

فهل هناك طريقة لفعل مثل الكود السابق ولكن من داخل جملة return نفسها لكي لا أكرر باقي الكود مرتين؟

Recommended Posts

  • 0
نشر

يوجد عدة طرق لإنجاز المطلوب مثلا:

تعريف دالة ضمن render ثم استدعائها في التابع return حيث تعيد هذه الدالة المكون المطلوب حسب شرط ما..

// ...

class App extends Component {
  // ...

  render() {
    let {isLoggedIn} = this.state;

    const renderAuthButton = () => {
      if (isLoggedIn) {
        return <button>Logout</button>;
      } else {
        return <button>Login</button>;
      }
    }

    return (
      <div className="App">
        <h1>
          This is a Demo showing several ways to implement Conditional Rendering in React.
        </h1>
        {renderAuthButton()}
      </div>
    );
  }
}

// ...

 

أو بطريقة مختصرة باستخدام المعامل الثلاثي:

حيث بعد اختبار الشرط سيتم إضافة المكون المناسب

  render() {
    let { isLoggedIn } = this.state;

    return (
      <div className="App">
        <h1>
          This is a Demo showing several ways to implement Conditional Rendering in React.
        </h1>
        {isLoggedIn ? <button>Logout</button> : <button>Login</button>}
      </div>
    );
  }
}

 

  • 0
نشر

لا يمكنك استخدام if else داخل ال return لكن يمكنك استخدام ternary operator ولحسن الحظ ليس فقط يمكنك استخدامها لتحاكي if else بل ايضا if else if else وذلك عن طريق ربطها كسلسلة متتالية 

import React from 'react';

export default function test() {
  return false ? <h1>1</h1> : false ? <h2>2</h2> : true ? <h3>3</h3> : null;
}

المثال في الأعلى هو نفسه 

if (false) {
  return <h1>1</h1>;
} else if (false) {
  return <h2>2</h2>;
} else if (true) {
  return <h3>3h3</h3>;
} else {
  return null;
}

 

  • 0
نشر

إذا أردت استخدام return واحدة فقط فالطريقة الوحيدة هي عبر استخدام ternary operator كما شرح الأخوة سابقا

اما إذا أردت استخدام if و else فيجب عليك استخدام أكثر من return واحدة

لكن إذا أردت استخدام nested ternay operator فسيكون الكود غير منظم وصعب القراءة ايضاً لهذا يفضل استخدام if و else لكود أكثر تنظيما وسهل القراءة

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...