Lompat ke konten
Kembali ke modul

React: Membangun Antarmuka Pengguna · 2/9

Component dan JSX

JSX itu cuma pemanggilan function. Begitu kamu melihatnya, aturannya berhenti terasa asal-asalan.

Baca 25 menit

Setelah pelajaran ini kamu bisa

  • Menjelaskan JSX dikompilasi jadi apa
  • Menulis sebuah component dan tahu kenapa namanya harus berhuruf kapital
  • Memakai ekspresi, kondisional, dan list di dalam JSX
  • Menjelaskan kenapa JSX memakai `className` dan `htmlFor`

Component adalah function yang mengembalikan deskripsi UI. Itu seluruh definisinya. JSX adalah sintaks yang membuat deskripsi itu tampak seperti HTML, dan ia dikompilasi jadi pemanggilan function biasa.

tsx
// What you write:
function Greeting({ name }) {
  return <p className="greeting">Hello, {name}</p>;
}

// What the compiler produces (roughly):
function Greeting({ name }) {
  return jsx("p", { className: "greeting", children: ["Hello, ", name] });
}
Begitu kamu melihat JSX itu pemanggilan function yang mengembalikan object, aturannya berhenti terasa asal-asalan — itu cuma aturan JavaScript.
Coba sendiri

createElement dan renderer yang berfungsi. Ini JSX dengan gula sintaksisnya dibuang.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Perhatikan dua hal di renderer itu. Sebuah component dipanggil sebagai function untuk mendapatkan output-nya — itu benar-benar seluruh arti dari "me-render sebuah component". Dan null di-render jadi tidak ada apa-apa, itu sebabnya condition ? <Thing /> : null adalah cara standar menampilkan sesuatu secara kondisional.

Aturan JSX, dan alasannya

AturanKarena
className, bukan classclass adalah kata kunci di JavaScript
htmlFor, bukan forfor juga kata kunci
onClick, bukan onclickProps memakai camelCase, seperti identifier JavaScript
Satu elemen root per returnSebuah function mengembalikan satu nilai
<br /> harus menutup sendiriIa dikompilasi jadi pemanggilan yang butuh penutup
{} untuk ekspresi apa punItu lubang tempat JavaScript masuk
{/* komentar */}Komentar juga menempati slot ekspresi
tsx
function VenueList({ venues, query }) {
  return (
    <>                                  {/* a Fragment: group without a wrapper div */}
      <h2>Venues</h2>

      {/* Any expression goes in braces */}
      <p>{venues.length} results for {query}</p>

      {/* Conditional: && for "show or nothing" */}
      {venues.length === 0 && <p>No venues found.</p>}

      {/* Conditional: ternary for "one or the other" */}
      {venues.length > 0 ? <Results venues={venues} /> : <EmptyState />}

      {/* Lists: map to an array of elements. key is required. */}
      <ul>
        {venues.map((venue) => (
          <li key={venue.id}>{venue.name}</li>
        ))}
      </ul>
    </>
  );
}
Coba sendiri

Nilai mana yang di-render React jadi output terlihat, dan mana yang hilang.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Tugas praktik

Di proyek ini, buka features/lesson/callout.tsx. Identifikasi: props apa yang diterimanya, di mana children dipakai, bagaimana ikon kondisionalnya dipilih, dan setiap tempat ekspresi JavaScript muncul di dalam kurung kurawal. Lalu temukan component yang mengembalikan Fragment (<>) dan jelaskan kenapa ia membutuhkannya.

Hasil yang diharapkan

Kamu bisa menunjuk setiap konstruksi dari tabel di atas pada kode nyata.