Conditional Rendering

if, ternary (? :) ve && operatörü ile koşula göre farklı arayüz göstermek, ve koşula göre farklı component'ler döndürmek -- basit örneklerle.

Başlangıç 9 dk
EN

Conditional Rendering

JSX dersinde, süslü parantez { } içine yalnızca "sonuç üreten" bir ifade konabildiğini, bu yüzden if yazamayıp bir ternary kullandığımızı kısaca görmüştük. Bu ders, koşula göre farklı arayüz göstermeyi ("conditional rendering") baştan sona, State ile birlikte işliyor.

if ile Conditional Rendering

if, JSX'in { } içine doğrudan yazılamaz -- ama return'den ÖNCE, normal bir JavaScript değişkenine karar vermek için kullanabilirsin:

function IfConditionalExample({ isLoggedIn }) {
  // if, bir SONUÇ ÜRETMEZ, bu yüzden doğrudan JSX'in { } içine yazılamaz.
  // Bunun yerine, return'den ÖNCE normal bir değişkene karar veriyoruz.
  let message;

  if (isLoggedIn) {
    message = "Hoş geldin!";
  } else {
    message = "Lütfen giriş yap.";
  }

  return <p>{message}</p>;
}

Burada if, hangi metnin message değişkenine atanacağına karar veriyor; JSX'in kendisi hâlâ tek bir {message} ifadesi.

Ternary (? :) ile Conditional Rendering

Ternary, bir SONUÇ ÜRETTİĞİ için { } içine doğrudan yazılabilir -- IfConditionalExample'daki birkaç satırı tek satıra indirir:

function TernaryConditionalExample({ isLoggedIn }) {
  // Ternary (? :) bir SONUÇ ÜRETİR, bu yüzden doğrudan { } içine yazılabilir.
  // IfConditionalExample'daki dört satırı tek satıra indiriyor.
  return <p>{isLoggedIn ? "Hoş geldin!" : "Lütfen giriş yap."}</p>;
}

İki seçenek arasında (bu VEYA şu) karar verirken ternary, if'ten daha kısa ve JSX içinde daha doğal.

&& Operatörü ile Conditional Rendering

Bazen iki seçenek arasında değil, "ya bir şey göster ya da hiçbir şey gösterme" arasında seçim yaparsın. Bunun için && kullanılır:

function AndOperatorConditionalExample({ hasNewMessage }) {
  // && işleci: sol taraf "truthy" ise sağ tarafı render eder, "falsy"
  // ise (false, 0, "", null, undefined) hiçbir şey render etmez.
  // Ternary'nin "else" kısmı olmadığı, yani "ya bunu göster ya da
  // hiçbir şey gösterme" durumunda kullanışlı.
  return (
    <div>
      <p>Gelen Kutusu</p>
      {hasNewMessage && <p>Yeni bir mesajın var!</p>}
    </div>
  );
}

&&'nin solu "truthy" (gerçek, dolu, sıfır olmayan) ise sağ taraf render edilir; solu "falsy" (false, 0, "", null, undefined) ise React hiçbir şey render etmez. Yaygın bir hata: sol taraf bir sayıysa ve o sayı 0 olabiliyorsa, 0 && <p>...</p> ekranda gerçekten 0 yazısını render eder -- çünkü 0 "falsy" olsa da JSX içinde render edilebilir bir değerdir. Bunu önlemek için sayıyı `hasNewMessage

0` gibi bir karşılaştırmayla açıkça boolean'a çevirmek daha güvenli.

Conditional Component'ler

Bazen koşula göre değişen şey tek bir metin değil, tamamen farklı bir component'tir:

function LoadingMessage() {
  return <p>Yükleniyor...</p>;
}

function WelcomeMessage({ name }) {
  return <p>Hoş geldin, {name}!</p>;
}

function ConditionalComponentExample({ isLoading, name }) {
  // Koşula göre tek bir metin değil, tamamen FARKLI bir component
  // döndürebilirsin -- her ikisi de kendi başına anlamlı bir component.
  if (isLoading) {
    return <LoadingMessage />;
  }

  return <WelcomeMessage name={name} />;
}

ConditionalComponentExample, koşula göre ya <LoadingMessage /> ya da <WelcomeMessage /> döndürüyor -- her ikisi de kendi başına anlamlı, bağımsız component'ler. Bu, Component Composition dersinde gördüğümüz "küçük component'lerden büyük arayüzler kurma" fikrinin, koşullarla birleşmiş hâli.

Özet ve Terimler Sözlüğü

Conditional rendering, koşula göre farklı içerik göstermenin yoludur. if, JSX dışında (return'den önce) bir değişkene karar vermek için kullanılır; ternary iki seçenek arasında, && ise "göster ya da hiç gösterme" durumunda JSX'in içinde doğrudan kullanılır. Koşula göre tamamen farklı component'ler de döndürülebilir.

Terimler Sözlüğü

Conditional Rendering — Bir koşula göre farklı içerik (metin, element, component) render etme.

Truthy / Falsy — JavaScript'te bir değerin if/&& gibi bir mantık bağlamında sırasıyla "doğru" ya da "yanlış" gibi davranması; false, 0, "", null, undefined falsy'dir, geri kalan her şey truthy'dir.

&& Operatörü — Solundaki ifade truthy ise sağındaki ifadeyi döndüren, değilse hiçbir şey render etmeyen JavaScript operatörü.