Menggambarkan Antarmuka Pengguna (UI)
React adalah pustaka JavaScript untuk melakukan render antarmuka pengguna (User Interface - UI). UI dibangun dari unit-unit kecil seperti tombol, teks, dan gambar. React memungkinkan Anda menggabungkan unit-unit tersebut menjadi suatu komponen yang reusable (dapat digunakan kembali), dan nestable (dapat diletakkan secara bersarang dan/atau di bawah komponen lainnya). Dari situs web hingga aplikasi, semua yang ada pada layar dapat dipecah menjadi komponen. Dalam bab ini, Anda akan belajar membuat, menyesuaikan, dan menampilkan komponen React secara kondisional.
In this chapter
- Cara menulis komponen React pertama Anda
- Kapan dan bagaimana membuat file multi-komponen
- Cara menambahkan markup ke JavaScript dengan JSX
- Cara menggunakan kurung kurawal dengan JSX untuk mengakses fungsionalitas JavaScript dari komponen Anda
- Cara mengonfigurasi komponen dengan props
- Cara melakukan render komponen secara kondisional
- Cara melakukan render beberapa komponen sekaligus
- Cara menghindari bug yang membingungkan dengan menjaga komponen tetap murni
Komponen Pertama Anda
Aplikasi React dibangun dari potongan-potongan antarmuka pengguna (UI) yang terisolasi yang disebut komponen. Komponen React adalah sebuah fungsi JavaScript yang dapat Anda tambahkan dengan markup. Komponen dapat sekecil tombol atau sebesar halaman utuh. Berikut adalah contoh komponen Gallery
yang me-render tiga komponen Profile
:
function Profile() { return ( <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" /> ); } export default function Gallery() { return ( <section> <h1>Ilmuwan yang luar biasa</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Ready to learn this topic?
Baca Komponen Pertama Anda untuk mempelajari cara mendeklarasikan dan menggunakan komponen React.
Read MoreMengimpor dan Mengekspor Komponen
Anda dapat mendeklarasikan banyak komponen dalam satu file, tetapi file yang besar dapat menjadi sulit untuk dinavigasi/dibaca. Untuk memecahkan masalah ini, Anda dapat mengekspor sebuah komponen ke dalam file sendiri, dan kemudian mengimpor komponen tersebut dari file lain:
import Profile from './Profile.js'; export default function Gallery() { return ( <section> <h1>Ilmuwan yang luar biasa</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Ready to learn this topic?
Baca Mengimpor dan Mengekspor Komponen untuk belajar bagaimana memecah komponen ke dalam file-file terpisah.
Read MoreMenulis markup dengan JSX
Setiap komponen React adalah sebuah fungsi JavaScript yang dapat berisi beberapa markup yang di-render oleh React ke peramban. Komponen React menggunakan ekstensi sintaksis bernama JSX untuk merepresentasikan markup tersebut. JSX terlihat mirip dengan HTML, tetapi sedikit lebih ketat dan dapat menampilkan informasi yang dinamis.
Menempel markup HTML ke dalam komponen React tidak selalu akan berfungsi:
export default function TodoList() { return ( // Ini tidak cukup berhasil <h1>Hedy Lamarr's Todos</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="Hedy Lamarr" class="photo" > <ul> <li>Ciptakan lampu lalu lintas baru <li>Latih adegan film <li>Meningkatkan teknologi spektrum </ul>
Jika Anda memiliki HTML seperti ini, Anda dapat memperbaikinya menggunakan konverter:
export default function TodoList() { return ( <> <h1>Hedy Lamarr's Todos</h1> <img src="https://i.imgur.com/yXOvdOSs.jpg" alt="Hedy Lamarr" className="photo" /> <ul> <li>Ciptakan lampu lalu lintas baru</li> <li>Latih adegan film</li> <li>Meningkatkan teknologi spektrum</li> </ul> </> ); }
Ready to learn this topic?
Baca Menulis Markup dengan JSX untuk mempelajarai cara menulis JSX yang valid.
Read MoreJavaScript di dalam JSX dengan kurung kurawal
JSX memungkinkan Anda menulis markup mirip HTML di dalam file JavaScript, menjaga logika rendering dan konten di tempat yang sama. Terkadang Anda ingin menambahkan sedikit logika JavaScript atau merujuk pada properti dinamis di dalam markup tersebut. Dalam situasi ini, Anda dapat menggunakan kurung kurawal di JSX Anda untuk “membuka jendela” ke JavaScript:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={person.theme}> <h1>{person.name}'s Todos</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Meningkatkan videophone</li> <li>Menyiapkan kuliah aeronautika</li> <li>Mengerjakan mesin berbahan bakar alkohol</li> </ul> </div> ); }
Ready to learn this topic?
Baca JavaScript di dalam JSX dengan Kurung Kurawal untuk mempelajari cara mengakses data JavaScript dari JSX.
Read MoreMengoper Props ke sebuah Komponen
Komponen React menggunakan props untuk berkomunikasi satu sama lain. Setiap komponen induk dapat memberikan informasi ke komponen anaknya dengan memberikan props. Props mungkin mengingatkan Anda pada atribut HTML, tetapi Anda dapat mengoper nilai JavaScript apa pun melalui props, termasuk objek, senarai, fungsi, dan bahkan JSX!
import { getImageUrl } from './utils.js' export default function Profile() { return ( <Card> <Avatar size={100} person={{ name: 'Katsuko Saruhashi', imageId: 'YfeOqp2' }} /> </Card> ); } function Avatar({ person, size }) { return ( <img className="avatar" src={getImageUrl(person)} alt={person.name} width={size} height={size} /> ); } function Card({ children }) { return ( <div className="card"> {children} </div> ); }
Ready to learn this topic?
Baca Mengoper Props ke sebuah Komponen untuk mempelajari cara mengoper dan membaca props.
Read MoreMe-render Secara Kondisional
Komponen Anda seringkali perlu menampilkan hal-hal yang berbeda tergantung pada kondisi yang berbeda. Di React, Anda dapat me-render JSX secara kondisional menggunakan sintaks JavaScript seperti if
statements, &&
, dan ?:
operator.
Dalam contoh ini, operator &&
JavaScript digunakan untuk me-render centang secara kondisional:
function Item({ name, isPacked }) { return ( <li className="item"> {name} {isPacked && '✔'} </li> ); } export default function PackingList() { return ( <section> <h1>Daftar Perlengkapan Sally Ride</h1> <ul> <Item isPacked={true} name="Pakaian luar angkasa" /> <Item isPacked={true} name="Helm dengan daun emas" /> <Item isPacked={false} name="Foto Tam" /> </ul> </section> ); }
Ready to learn this topic?
Baca Me-render Secara Kondisional untuk mempelajari cara me-render konten secara kondisional.
Read MoreMe-render List
Anda akan sering ingin menampilkan beberapa komponen serupa dari koleksi data. Anda dapat menggunakan filter()
dan map()
dari JavaScript dengan React untuk menyaring dan mentransformasikan senarai data Anda menjadi senarai komponen.
Untuk setiap item pada senarai, Anda perlu menentukan sebuah kunci key
. Biasanya, Anda ingin menggunakan ID dari basisdata sebagai key
. key
memungkinkan React untuk melacak posisi setiap item di dalam daftar bahkan jika daftar berubah.
import { people } from './data.js'; import { getImageUrl } from './utils.js'; export default function List() { const listItems = people.map(person => <li key={person.id}> <img src={getImageUrl(person)} alt={person.name} /> <p> <b>{person.name}:</b> {' ' + person.profession + ' '} yang terkenal dengan {person.accomplishment} </p> </li> ); return ( <article> <h1>Ilmuwan</h1> <ul>{listItems}</ul> </article> ); }
Ready to learn this topic?
Baca Me-render List untuk mempelajari cara me-render daftar komponen dan cara memilih key
.
Menjaga Komponen Tetap Murni
Sebagian fungsi JavaScript adalah murni (pure). Sebuah fungsi murni:
- Memperhatikan urusannya sendiri. fungsi tidak mengubah objek atau variabel apapun yang ada sebelum fungsi dipanggil.
- Input sama, output sama. Dengan input yang sama, sebuah fungsi murni harus selalu memiliki output yang sama.
Dengan hanya benar-benar menulis komponen Anda sebagai fungsi murni, Anda dapat menghindari seluruh bug yang membingungkan dan perilaku yang tidak dapat diprediksi saat kode Anda berkembang. Berikut ini adalah contoh komponen tidak murni:
let guest = 0; function Cup() { // Buruk: memodifikasi variabel yang sudah ada sebelum Cup dipanggil! guest = guest + 1; return <h2>Cangkir teh untuk tamu #{guest}</h2>; } export default function TeaSet() { return ( <> <Cup /> <Cup /> <Cup /> </> ); }
Anda dapat membuat komponen ini menjadi murni dengan mengoper sebuah prop daripada memodifikasi variabel yang sudah ada:
function Cup({ guest }) { return <h2>Cangkir teh untuk tamu #{guest}</h2>; } export default function TeaSet() { return ( <> <Cup guest={1} /> <Cup guest={2} /> <Cup guest={3} /> </> ); }
Ready to learn this topic?
Baca Menjaga Komponen Tetap Murni untuk mempelajari cara menulis komponen sebagai fungsi yang murni dan dapat diprediksi.
Read MoreApa selanjutnya?
Lanjut ke Komponen Pertama Anda untuk mulai membaca halaman bab ini dari awal!
Atau, jika Anda sudah familiar dengan topik ini, mengapa tidak membaca tentang Menambahkan Interaktivitas?