Kita akan membangun sebuah gim kecil sepanjang tutorial ini. Anda bisa jadi tergoda untuk melewati tutorial ini karena Anda tidak benar-benar membuat gim — namun luangkanlah sedikit waktu untuk mencobanya. Teknik-teknik yang akan Anda pelajari pada tutorial ini adalah hal-hal dasar yang digunakan untuk membangun aplikasi React, dan menguasai teknik-teknik tersebut akan memberikan pemahaman terhadap React secara lebih mendalam. Show
Tutorial ini akan dibagi menjadi beberapa bagian:
Anda tidak perlu menyelesaikan semua bagian sekaligus untuk mendapatkan pembelajaran dari tutorial ini. Cobalah mengerjakan semampu Anda — walaupun hanya satu atau dua bagian. Apa yang Kita Kembangkan?Dalam tutorial ini, kami akan menunjukkan cara membuat permainan tic-tac-toe interaktif menggunakan React. Anda dapat melihat gambaran aplikasi yang akan kita buat di sini: Hasil Akhir. Jika kode tersebut tidak masuk akal untuk Anda, atau Anda tidak akrab dengan sintaks kode tersebut, jangan khawatir! Tujuan dari tutorial ini adalah untuk membantu Anda mengerti React dan sintaksnya. Kami merekomendasikan Anda untuk mencari tahu tentang permainan tic-tac-toe sebelum melanjutkan tutorial ini. Salah satu fitur yang akan Anda lihat adalah adanya daftar bernomor di sebelah kanan papan permainan. Daftar ini memberikan Anda semua riwayat langkah yang sudah terjadi dalam permainan, dan terus diperbarui selama permainan berlangsung. Anda bisa menutup laman permainan tic-tac-toe setelah Anda paham dengan permainan tersebut. Kita akan memulai dari templat sederhana pada tutorial ini. Langkah selanjutnya adalah mempersiapkan Anda sehingga Anda dapat memulai mengembangkan permainan tic-tac-toe. PrasyaratKami mengasumsikan bahwa Anda memiliki pemahaman akan HTML dan JavaScript, namun Anda seharusnya tetap dapat mengikuti tutorial ini jika Anda memiliki pemahaman pada bahasa pemrograman lainnya. Kami juga berasumsi bahwa Anda memiliki pemahaman akan konsep pemrograman seperti fungsi, objek, senarai, dan pada tingkat yang lebih rendah, kelas. Jika Anda memerlukan pengingat tentang JavaScript, kami merekomendasikan Anda untuk membaca panduan ini. Perlu diperhatikan juga bahwa kita menggunakan beberapa fitur dari ES6 — versi terbaru JavaScript. Di tutorial ini, kita menggunakan statement arrow functions, kelas, 4, dan 5. Anda dapat menggunakan untuk melihat hasil kompilasi kode ES6.Mempersiapkan TutorialAda dua cara untuk menyelesaikan tutorial ini: Anda dapat menulis kode pada browser Anda atau mempersiapkan local development environment pada komputer Anda. Persiapan Cara 1: Menulis Kode pada BrowserIni adalah cara tercepat untuk memulai! Pertama, buka kode permulaan ini pada tab baru. Tab baru tersebut seharusnya menunjukan papan permainan tic-tac-toe yang kosong dan kode React. Kita akan mengedit kode React tersebut pada tutorial ini. Anda dapat melewati cara kedua untuk persiapan dan menuju ke bagian untuk mendapatkan ikhtisar dari React. Persiapan Cara 2: Local Development EnvironmentCara ini murni opsional dan tidak wajib pada tutorial ini! Opsional: Instruksi untuk mengikuti secara lokal menggunakan editor teks pilihan Anda Persiapan ini membutuhkan lebih banyak langkah tetapi membuat Anda dapat menyelesaikan tutorial ini menggunakan editor teks pilihan Anda. Berikut adalah beberapa langkah yang harus diikuti:
Sekarang, jika Anda menjalankan 4 pada folder project Anda dan mengakses 5 pada browser Anda, Anda akan melihat papan tic-tac-toe yang kosong.Kami merekomendasikan Anda untuk mengikuti instruksi ini untuk mengkonfigurasi syntax highlighting untuk editor Anda. Tolong, Saya Mengalami Masalah!Jika Anda mengalami masalah, silahkan kunjungi sumber dukungan komunitas. Secara khusus, Reactiflux Chat adalah langkah yang baik untuk mendapat bantuan dengan cepat. Jika Anda tidak mendapat jawaban, atau tetap mengalami masalah, maka silahkan mengajukan issue, dan kami akan membantu Anda. IkhtisarSekarang karena Anda sudah siap, mari mempelajari ikhtisar dari React! Apa Itu React?React adalah library JavaScript yang deklaratif, efisien, dan fleksibel untuk membangun antarmuka pengguna. React memungkinkan Anda untuk membuat antarmuka kompleks dari kumpulan kode yang kecil dan terisolasi yang disebut “komponen”. React memiliki beberapa jenis komponen, tetapi kita akan memulai dengan subkelas 6:
Kita akan membahas tag aneh yang seperti XML sesaat lagi. Kita menggunakan komponen untuk memberi tahu React yang ingin kita lihat pada layar. Ketika data kita berubah, React akan memperbarui dan me-render ulang komponen kita dengan efisien. Di sini, ShoppingList adalah kelas komponen React atau tipe komponen React. Sebuah komponen dapat menerima parameter yang disebut dengan 7 (singkatan dari 8) dan mengembalikan sebuah hirarki dari tampilan-tampilan yang akan ditampilkan via method 9.Method 9 mengembalikan sebuah deskripsi dari benda yang akan Anda lihat pada layar. React mengambil deskripsi tersebut dan menampilkan hasilnya ke layar. Secara khusus, 9 mengembalikan elemen React, yang merupakan deskripsi ringan tentang yang harus di- 9. Kebanyakan pengembang React menggunakan sintaks khusus yang disebut “JSX” yang memudahkan struktur dari React mudah untuk ditulis. Sintaks 3 akan diubah menjadi 4 pada saat build. Contoh di atas sama dengan sintaks berikut:
Jika Anda penasaran, 5 dideskripsikan dengan lebih rinci pada bagian , tetapi kita tidak akan menggunakannya pada tutorial ini. Kita akan tetap menggunakan JSX.JSX hadir dengan kekuatan penuh dari JavaScript. Anda dapat menulis setiap ekspresi JavaScript di antara tanda kurung kurawal di dalam JSX. Setiap elemen React adalah objek JavaScript yang dapat Anda simpan di dalam variabel atau Anda oper ke seputar program Anda. Komponen 6 di atas hanya me-render komponen DOM built-in seperti 3 dan 8. Namun, Anda juga dapat membuat dan me-render komponen React Anda sendiri. Contohnya, kita dapat mengacu ke seluruh daftar belanja di atas dengan menuliskan 9. Setiap komponen React terenkapsulasi dan dapat beroperasi secara mandiri; hal ini memungkinkan Anda untuk membangun sebuah antarmuka pengguna yang kompleks dari komponen sederhana.Melihat Kode PermulaanJika Anda akan mengikuti tutorial ini di browser Anda, buka kode ini pada tab baru: Kode Permulaan. Jika Anda mengikuti tutorial ini dengan local environment Anda, bukalah 0 pada folder project Anda (Anda sudah pernah menyentuh file ini selama ).Kode Permulaan ini berdasarkan pada aplikasi yang akan kita buat. Kami sudah menyediakan style CSS sehingga Anda bisa fokus mempelajari React dan memprogram permainan tic-tac-toe. Dengan melihat kode permulaan, Anda akan melihat bahwa kita memiliki tiga komponen React:
Komponen Square akan me-render sebuah 1 dan komponen Board akan me-render 9 persegi. Komponen Game akan me-render sebuah papan dengan nilai sementara yang akan kita ganti nanti. Saat ini belum ada komponen interaktif.Mengoper Data Melalui PropsUntuk memulai mendalami React, mari kita mencoba untuk mengoper data dari komponen Board ke komponen Square kita. Kami menyarankan mengetik kode-kode berikut secara manual selama Anda mengikuti tutorial ini dan menghindari menggunakan copy/paste. Ini akan membantu mengembangkan memori otot Anda dan meningkatkan pemahaman Anda mengenai React. Di dalam method 2 Board, ubah kodenya untuk mengoperkan prop bernama 3 ke Square:
Ubah method 9 Square untuk menampilkan nilai tersebut dengan mengganti 5 dengan 6:
Sebelum: Sesudah: Anda seharusnya melihat angka dari setiap persegi pada keluaran yang telah di-render. Lihat kode lengkap sampai tahap ini Selamat! Anda baru saja “mengoperkan sebuah prop” dari komponen Board ke komponen Square. Mengoperkan props adalah cara informasi dapat mengalir dalam aplikasi React dari (komponen) induk ke anak. Membuat Komponen InteraktifMari mengisi komponen Square dengan sebuah “X” ketika kita mengklik komponen tersebut. Pertama, ubah button tag yang dikembalikan dari fungsi 7 komponen Square menjadi:
Jika kita mengklik salah satu Square, kita akan mendapatkan alert pada browser kita.
Selanjutnya, kita ingin agar komponen Square “mengingat” bahwa komponen tersebut sudah diklik dan mengisinya dengan “X”. Untuk “mengingat” sesuatu, komponen menggunakan state. Komponen React dapat memiliki state dengan mengatur 3 pada konstruktornya. 3 harus dianggap private oleh komponen React tempat ia didefinisikan. Mari menyimpan nilai Square saat ini pada 3 dan mengubahnya ketika Square diklik.Pertama, kita akan menambahkan konstruktor pada kelas untuk menginisialisasi state:
Sekarang kita akan mengubah method 9 Square untuk menampilkan nilai state saat ini ketika diklik:
Setelah perubahan di atas, tag 1 yang dikembalikan dari method 9 Square akan terlihat seperti ini: 0Dengan memanggil 9 dari handler 0 pada method 9 Square, kita memberi tahu React untuk me-render ulang Square setiap 1 diklik. Setelah diperbarui, 1 dari Square akan menjadi 04, jadi kita akan melihat 05 pada papan permainan. Jika Anda mengklik salah satu Square, maka akan muncul 05.Ketika Anda memanggil 07 di sebuah component, React akan memperbarui komponen anak di dalamnya secara otomatis.Lihat kode lengkap sampai tahap ini Developer ToolsEkstensi React Devtools untuk Chrome dan Firefox memungkinkan Anda untuk melihat pohon komponen dari React dengan menggunakan perangkat pengembang browser Anda. React Devtools memungkinkan Anda untuk mengecek props dan state dari komponen React Anda. Setelah meng-install React Devtools, Anda dapat mengklik kanan elemen manapun pada halaman Anda, kemudian klik “Inspect” untuk membuka perangkat pengembang dan tab React (“⚛️ Components” and “⚛️ Profiler”) akan muncul sebagai tab terakhir di sebalah kanan. Gunakan “⚛️ Components” untuk menginspeksi pohon komponen. Walaupun demikian, perlu diperhatikan bahwa ada beberapa langkah tambahan untuk membuat aplikasi Anda bekerja dengan CodePen:
Menyelesaikan PermainanSekarang kita sudah memiliki blok-blok dasar untuk membangun permainan tic-tac-toe. Untuk menyelesaikan permainan ini, kita memerlukan penempatan alternatif “X” dan “O” pada papan dan kita memerlukan cara untuk menentukan pemenangnya. Menaikkan StateSaat ini, setiap komponen Square mengurus state dari permainan. Untuk menentukan pemenang, kita akan mengurus nilai dari setiap persegi di satu lokasi. Kita dapat memikirkan Board seharusnya cukup mengambil state setiap Square. Walaupun pendekatan ini mungkin di React, tetapi kami tidak menyarankannya karena kodenya akan sulit untuk dimengerti, rentan terhadap bugs, dan sulit untuk di-refactor. Sebagai gantinya, pendekatan terbaik untuk adalah untuk menyimpan state dari permainan pada komponen Board. Komponen Board dapat memberitahu setiap Square untuk menampilkan data dengan memberikannya melalui prop . Untuk mengambil data dari beberapa anak atau membuat dua komponen anak berkomunikasi satu sama lain, Anda perlu mendeklarasikan state pada komponen induk. Komponen induk dapat memberikan state ke anak dengan menggunakan props; pola ini dapat membuat komponen-komponen anak tetap sinkron satu sama lain dan dengan komponen induk. Menaikkan state ke komponen induk lazim ketika me-refactor komponen React. Mari memanfaatkan kesempatan ini untuk mencobanya. Kita akan menambahkan konstruktor ke Board dan menginisialisasi state dari Board berisi array dengan 9 null. Sembilan nilai ini melambangkan 9 persegi: 1Ketika kita mengisi papan permainan nanti, senarai 08 akan terlihat seperti ini: 2Method 2 dari Board saat ini terlihat seperti ini: 3Awalnya, kita dari Board untuk menampilkan angka 0 sampai 8 di setiap Square. Pada langkah berbeda sebelumnya, kita menggantikan angka dengan “X” yang . Ini sebabnya Square saat ini mengabaikan prop 3 yang diberikan oleh Board.Sekarang kita akan menggunakan mekanisme pengoperan prop lagi. Kita akan memodifikasi Board untuk memberi instruksi pada setiap Square untuk mengubah nilai saat ini ( 04, 12, atau 13). Kita sudah mendefinisikan senarai 14 pada konstruktor Board dan kita akan memodifikasi method 2 Board untuk membaca dari state: 4Lihat kode lengkap sampai tahap ini Setiap Square akan menerima prop 3 yang dapat berupa 04, 12, atau 13 untuk persegi kosong.Selanjutnya, kita perlu mengubah perilaku Square saat diklik. Komponen Board saat ini mengatur persegi yang sedang diisi. Kita perlu memikirkan sebuah cara agar Square dapat memperbarui state di Board. Karena state dianggap sebagai private di dalam suatu komponen, kita tidak dapat mengubah state Board melalui Square secara langsung. Untuk mempertahankan state privacy dari Board, kita akan memberikan sebuah fungsi dari Board ke Square. Fungsi ini akan dipanggil ketika komponen Square diklik. Kita akan mengubah method 2 di dalam Board menjadi: 5
Sekarang kita memberikan dua prop dari Board ke Square: 3 dan 0. Prop 0 adalah sebuah fungsi yang dapat dipanggil oleh Square ketika diklik. Kita akan membuat perubahan berikut pada Square:
Setelah perubahan tersebut, komponen Square akan terlihat seperti ini: 6Ketika sebuah Square diklik, fungsi 0 yang disediakan oleh Board akan dipanggil. Berikut adalah ulasan bagaimana kita dapat memperoleh hasil saat ini:
Ketika kita mencoba untuk mengklik salah satu Square, kita seharusnya akan mendapatkan sebuah pesan error karena kita belum mendefinisikan 45. Sekarang kita akan menambahkan 45 pada kelas Board: 7Lihat kode lengkap sampai tahap ini Setelah perubahan ini, kita dapat mengklik Square kembali untuk mengisinya. Tetapi, sekarang state disimpan pada komponen Board, bukan pada setiap komponen Square. Ketika state Board berubah, komponen Square akan di-render ulang secara otomatis. Dengan menyimpan state dari setiap persegi pada komponen Board, kita dapat menentukan pemenangnya pada tahap berikutnya. Karena komponen Square tidak lagi mengatur state, komponen Square menerima nilai dari komponen Board dan memberikan informasi ke komponen Board ketika diklik. Dalam istilah React, komponen Square sekarang disebut dengan controlled components. Komponen Board memiliki kontrol penuh pada komponen Square. Perhatikan bahwa di dalam 45, kita memanggil 51 untuk membuat kopi senarai 14 untuk memodifikasinya sebagai ganti dari memodifikasi senarai yang ada. Kami akan menjelaskan alasan kita membuat kopi dari senarai 14 di bagian selanjutnya.Mengapa Immutablility Itu PentingPada contoh kode sebelumnya, kami menyarankan Anda untuk menggunakan 51 untuk membuat kopi dari senarai 14 untuk memodifikasinya sebagai ganti dari memodifikasi senarai yang ada. Kita akan membahas immutability dan mengapa immutability penting untuk dipelajari.Secara umum, ada dua pendekatan untuk mengubah data. Pendekatan pertama adalah untuk me-mutate data dengan mengubah nilai dari data secara langsung. Pendekatan kedua adalah dengan mengganti data dengan kopi baru yang memiliki perubahan yang diinginkan. Perubahan Data dengan Mutation 8Perubahan Data Tanpa Mutation 9Hasil akhir dari kedua pendekatan sama tetapi dengan tidak melakukan mutate (atau mengganti data di dalamnya) secara langsung, kita mendapatkan keuntungan sebagai berikut. Fitur Kompleks Menjadi Lebih SederhanaImmutability membuat fitur kompleks menjadi lebih mudah untuk diimplementasikan. Nanti pada tutorial ini juga, kita akan mengimplementasikan fitur “penjelajahan waktu” yang memungkinkan kita untuk mengulas riwayat permainan tic-tac-toe kita dan “lompat kembali” ke langkah sebelumnya. Fungsionalitas ini tidak spesifik ke permainan — sebuah kemampuan untuk undo dan redo beberapa aksi adalah kebutuhan yang umum dalam sebuah aplikasi. Menghindari mutasi data memungkinkan kita untuk menyimpan riwayat permainan sebelumnya utuh dan menggunakannya kembali kemudian. Mendeteksi PerubahanMendeteksi perubahan pada objek mutable sulit karena mereka dimodifikasi secara langsung. Deteksi ini membutuhkan objek mutable tersebut dibandingkan dengan beberapa kopi sebelumnya dari dirinya dan seluruh melintasi seluruh pohon objek. Mendeteksi perubahan pada objek immutable dianggap lebih mudah. Jika objek immutable yang ditunjuk berbeda dengan objek sebelumnya, maka objeknya sudah berubah. Menentukan Waktu Untuk Melakukan Render Ulang di ReactKeuntungan utama dari immutability adalah membantu Anda untuk membuat pure component di React. Data yang immutable dapat dengan mudah memastikan apakah perubahan sudah terjadi, yang juga membantu untuk menentukan apakah komponen perlu di-render ulang. Anda dapat mempelajari 56 lebih lanjut dan bagaimana cara membuat pure components dengan membaca .Function ComponentsSekarang kita akan mengubah Square menjadi function component. Dalam React, function component adalah cara lebih mudah untuk menulis komponen yang hanya berisi method 9 dan tidak memiliki state. Sebagai ganti menulis kelas yang merupakan turunan dari 6, kita dapat menulis sebuah fungsi yang menerima 7 sebagai masukan dan mengembalikan apa yang harus di-render. Menulis function component lebih tidak jemu dibanding menulis kelas dan banyak komponen dapat ditulis dengan cara ini.Ganti kelas Square dengan fungsi berikut: 0Kita sudah mengganti 60 dengan 7 saat muncul.Lihat kode lengkap sampai saat ini
Mengambil GiliranSekarang kita perlu memperbaiki kerusakan yang cukup jelas pada permainan tic-tac-toe kita: “O” tidak dapat dituliskan ke dalam papan. Kita akan menentukan “X” mengambil giliran pertama sebagai nilai default. Kita dapat menentukan nilai default dengan mengubah state awal pada konstruktor Board: 1Setiap pemain selesai dengan langkahnya, 66 (sebuah boolean) akan diubah nilainya untuk menentukan siapa yang akan membuat langkah selanjutnya dan state dari permainan akan disimpan. Kita akan mengubah fungsi 45 dari Board untuk mengubah nilai dari 66: 2Dengan perubahan ini, “X” dan “O” akan mendapatkan giliran setiap satu langkah selesai. Mari mengubah teks “status” pada 9 di Board, sehingga teks menampilkan pemain mana yang sedang mendapat giliran selanjutnya: 3Setelah mengubahnya, Anda akan memiliki komponen Board berikut: 4Lihat kode lengkap sampai tahap ini Menentukan PemenangSekarang kita sudah menampilkan pemain mana yang akan mendapat giliran selanjutnya, kita juga perlu menampilkan sesuatu ketika permainan sudah dimenangkan oleh salah satu pemain dan tidak ada giliran lagi. Kita dapat menentukan pemenang dengan menambahkan fungsi berikut pada akhir file: 5Ketika diberi senarai dari kesembilan persegi, fungsi ini akan mengecek pemenang dan 04, 12, atau 13 sesuai dengan hasil.Kita akan memanggil 73 pada fungsi 9 Board untuk mengecek adanya salah satu pemain yang sudah menang. Jika salah satu pemain sudah menang, kita dapat menampilkan teks seperti “Winner: X” atau “Winner: O”. Kita akan mengganti deklarasi 75 pada fungsi 9 Board dengan kode berikut: 6Kita dapat mengubah fungsi 45 Board untuk kembali lebih awal dengan mengabaikan klik jika salah satu pemain sudah menang atau jika sebuah Square sudah diisi: 7Lihat kode lengkap sampai tahap ini Selamat! Anda sekarang sudah memiliki permainan tic-tac-toe yang berjalan dengan baik. Anda juga telah belajar dasar-dasar dari React. Jadi Anda mungkin adalah pemenang yang sebenarnya disini. Menambahkan Penjelajahan WaktuSebagai latihan terakhir, mari kita membuat permainan kita dapat “kembali” ke langkah sebelumnya pada permainan. Menyimpan Riwayat LangkahJika kita melakukan mutate pada senarai 14, mengimplementasikan penjelajahan waktu akan sangat sulit.Tetapi, kita menggunakan 79 untuk membuat kopi baru dari senarai 14 setelah setiap langkah dan . Hal ini akan membuat kita dapat menyimpan setiap versi sebelumnya dari senarai 14 dan melakukan navigasi di antara giliran-giliran yang sudah terjadi.Kita akan menyimpan riwayat senarai 14 pada senarai lain yang bernama 83. Senarai 83 menggambarkan semua state dari Board dari awal hingga akhir, dan memiliki bentuk seperti ini: 8Sekarang kita akan menentukan komponen yang akan memiliki state 83.Menaikkan State, LagiKita ingin komponen Game teratas untuk menampilkan riwayat langkah. Untuk melakukan hal tersebut, komponen Game memerlukan akses ke 83, sehingga kita akan menempatkan state 83 pada komponen teratas Game.Menempatkan state 83 ke komponen Game memungkinkan kita menghapus state 14 dari komponen anaknya, komponen Board. Seperti yang kita lakukan pada bagian dari komponen Square ke komponen Board, sekarang kita akan menaikkannya dari Board ke komponen teratas Game. Hal ini memberikan komponen Game kontrol penuh pada data Board dan memungkinkannya untuk memberi instruksi ke Board untuk me-render giliran sebelumnya dari 83.Pertama, mari kita mempersiapkan state awal untuk komponen Game di dalam konstruktornya: 9Selanjutnya, kita akan membuat komponen Board menerima prop 14 dan 0 dari komponen Game. Karena sekarang kita sudah memiliki handler untuk klik di dalam Board untuk banyak Square, kita akan perlu memberikan lokasi dari setiap Square ke handler 0 untuk memberi tahu Square mana yang diklik. Berikut adalah langkah yang diperlukan untuk mengubah komponen Board:
Sekarang komponen Board akan terlihat seperti ini: 0Kita akan mengubah fungsi 9 pada komponen Game agar fungsi tersebut menggunakan entri riwayat terakhir untuk menentukan dan menampilkan status permainan: 1Karena sekarang komponen Game me-render status permainan, kita dapat menghapus kode yang bersangkutan dari method 9 Board. Setelah melakukan refactor, fungsi 9 Board akan terlihat seperti ini: 2Terakhir, kita perlu memindahkan method 45 dari komponen Board ke komponen Game. Kita juga perlu mengubah 45 karena state komponen Game memiliki struktur yang berbeda. Di dalam method 45 Game, kita menggabungkan (concat) entri riwayat baru ke dalam 83. 3
Sampai tahap ini, komponen Board hanya memerlukan method 2 dan 9. State permainan dan method 45 seharusnya ada di dalam komponen Game.Lihat kode lengkap sampai tahap ini Menampilakan Langkah-Langkah SebelumnyaKarena kita merekam riwayat permainan tic-tac-toe, sekarang kita dapat menampilkannya ke pemain sebagai daftar langkah sebelumnya. Kita mengetahui sebelumnya bahwa elemen React adalah object first-class JavaScript; kita dapat mengoperkannya ke manapun pada aplikasi kita. Untuk me-render banyak elemen React, kita dapat menggunakan senarai berisi elemen React. Di JavaScript, senarai memiliki method 14 yang sering digunakan untuk melakukan pemetaan data ke data lain, contohnya: 4Dengan menggunakan method 15, kita dapat memetakan riwayat langkah kita ke elemen React yang melambangkan tombol pada layar dan menampilkan daftar tombol untuk “melompat” ke langkah sebelumnya.Mari menerapkan 15 pada 83 di method 9 Game: 5Lihat kode lengkap sampai tahap ini Untuk setiap langkah pada riwayat permainan tic-tac-toe, kita membuat 19 yang berisi 1. Tombol ( 1) memiliki handler 0 yang akan memanggil method bernama 23. Kita belum mengimplementasikan method 24. Untuk sekarang, kita seharusnya sudah melihat daftar langkah yang sudah terjadi dalam permainan dan peringatan pada developer tools console yang bertuliskan:
Mari membahas makna dari peringatan tersebut. Memilih Sebuah KeyKetika kita me-render sebuah list, React menyimpan informasi tentang setiap elemen dalam list yang di-render. Ketika kita memperbarui sebuah list, React perlu menentukan elemen yang sudah berubah. Kita bisa saja menambahkan, menghapus, mengatur ulang, atau memperbarui elemen pada list. Bayangkan perubahan dari 6ke 7Selain jumlah yang diperbarui, kemampuan baca manusia mungkin akan mengatakan bahwa kita menukar urutan Ben dan Alexa dan menyisipkan Claudia di antara Alexa dan Ben. Tetapi, React adalah program komputer dan tidak tahu intensi kita. Karena React tidak tahu intensi kita, kita perlu memberikan properti key dari setiap elemen pada list untuk membedakan setiap elemen list dari saudaranya (elemen lain dalam satu hirarki). Salah satu opsi adalah dengan menggunakan string 25, 26, 27. Jika kita menampilkan data dari basisdata, ID Alexa, Ben, Claudia pada database dapat digunakan sebagai key. 8** Ketika list di-render ulang, React mengambil seluruh key dari elemen list dan mencari elemen sebelumnya yang memiliki key yang sama. Jika list saat ini memiliki key yang tidak ada sebelumnya, React akan membuat komponen. Jika list saat ini kehilangan sebuah key yang ada pada list sebelumnya, React menghapus (destroy) komponen sebelumnya. Jika ada dua key yang sama, komponen yang bersangkutan dipindahkan. Key memberi tahu React identitas dari tiap komponen, sehingga membuat React dapat mempertahankan state di setiap render ulang. Jika key dari sebuah komponen berubah, komponen akan dihapus dan dibuat ulang dengan state baru. 28 adalah properti khusus dan sudah dipesan di React (bersama dengan 29, fitur yang lebih lanjut). Ketika sebuah elemen dibuat, React mengekstrak properti 28 dan menyimpannya langsung ke elemen yang dikembalikan. Walaupun 28 terlihat seperti bagian dari 7, 28 tidak dapat diacu menggunakan 34. React menggunakan 28 untuk menentukan komponen yang akan diubah secara otomatis. Sebuah komponen tidak dapat menanyakan 28 yang dia miliki.Kami sangat merekomendasikan Anda untuk memberikan key yang baik ketika membuat list dinamik. Jika Anda tidak memiliki key yang baik, Anda dapat mempertimbangkan restukturisasi data Anda sehingga Anda memiliki key yang baik. Jika tidak ada key yang diberikan, React akan menampilkan sebuah peringatan dan menggunakan indeks senarai sebagai nilai default. Menggunakan indeks senarai bermasalah ketika kita mencoba untuk mengatur ulang elemen list atau menyisipkan/menghapus elemen list. Memberikan 37 secara eksplisit menghilangkan peringatannya, tetapi memiliki masalah yang sama, sehingga tidak direkomendasikan pada banyak kasus.Key tidak perlu unik secara global. Key hanya perlu unik di antara komponen dan saudaranya. Mengimplementasikan Penjelajahan WaktuDi dalam riwayat permainan tic-tac-toe, setiap langkah sebelumnya memiliki ID unik yang bersangkutan dengan langkah tersebut: ID tersebut adalah angka terutut yang melambangkan urutan langkah. Riwayat langkah tidak pernah di atur ulang, dihapus, atau disisipi elemen lain di tengah, jadi pada kasus ini kita dapat menggunakan indeks langkah sebagai key. Dalam method 9 komponen Game, kita dapat menambahkan key sebagai 39 dan peringatan React tentang key akan menghilang: 9Lihat kode lengkap sampai tahap ini Mengklik salah satu tombol pada elemen list akan menghasilkan error karena method 40 tidak didefinisikan (undefined). Sebelum kita mengimplementasikan 40, kita akan menambahkan 42 di dalam state komponen Game untuk melambangkan langkah yang sedang kita lihat.Pertama, tambahkan 43 pada state awal di 7 Game: 0Kemudian, kita akan mendefinisikan method 40 di dalam Game untuk memperbarui 42. Kita juga dapat membuat 66 true jika angka yang kita berikan pada 42 adalah genap: 1Sekarang kita akan mengubah beberapa bagian method 45 pada Game yang akan dipicu ketika Anda mengklik sebuah persegi.State 42 yang sudah kita tambahkan menggambarkan langkah yang sedang ditampilkan ke pengguna saat ini. Setelah kita membuat langkah baru, kita perlu memperbarui 42 dengan menambahkan 52 sebagai bagian dari argumen 9. Hal ini memastikan kita tidak selalu menampilkan langkah yang sama setelah langkah baru berhasil dibuat.Kita juga akan mengganti 54 dengan 55. Hal ini untuk memastikan jika kita “kembali” dan membuat langkah baru dari titik tersebut, kita membuang semua riwayat “masa depan” yang sekarang menjadi tidak benar. 2Terakhir, kita dapat mengubah method 9 dari komponen Game dari yang selalu me-render langkah terakhir menjadi me-render langkah yang saat ini dipilih berdasarkan 42: 3Jika kita mengklik salah satu langkah pada riwayat permainan, papan tic-tac-toe seharusnya langsung memperbarui dirinya dan menampilkan papan setelah langkah tersebut dijalankan. Lihat kode penuh sampai saat ini UlasanSelamat! Anda sudah membuat permainan tic-tac-toe yang:
Kerja bagus! Kami berharap sekarang Anda merasa Anda memiliki pemahaman yang baik tentang bagaimana React bekerja. Lihat hasil akhirnya disini: Hasil Akhir. Jika Anda memiliki waktu luang atau ingin melatih kemampuan baru React Anda, berikut terdapat beberapa ide untuk perbaikan yang dapat Anda aplikasikan pada permainan tic-tac-toe terurut berdasarkan tingkat kesulitan paling mudah ke yang paling sulit:
Melalui tutorial ini, kita menyentuh beberapa konsep React termasuk di dalamnya elemen, komponen, props, dan state. Untuk penjelasan lebih rinci dari setiap topik tersebut, kunjungi dokumentasi. Untuk mempelajari lebih lanjut mengenai cara mendefinisikan komponen, kunjungi Referensi API 6.
Apa itu react bootstrap?React Bootstrap adalah framework CSS Bootstrap yang dibagun ulang setiap componentnya dari awal, sehingga tidak memerlukan lagi jQuery di dalamnya. Dan mampu digunakan untuk membangun sebuah user interface dengan ekosistem yang besar.
Apa yang dimaksud dengan bootstrap dan bagaimana cara menggunakannya?Bootstrap adalah framework front-end gratis yang cukup populer di kalangan developer saat ini, khususnya yang bekerja di bidang desain web. Framework ini mudah digunakan dan membantu developer bekerja lebih cepat tanpa harus menulis kode HTML, CSS, dan JavaScript secara manual.
Bagaimana cara memasang bootstrap?Download terlebih dahulu file bootstrap melalui laman resminya. ... . Selanjutnya bukalah teks editor Anda. ... . Kemudian klik menu File yang ada di bagian toolbar aplikasi Sublime. ... . Selanjutnya simpanlah file tersebut dengan cara klik menu File lalu pilih menu Save.. Apa itu Bootstrap 5?Tentang Kelas. Bootstrap adalah sebuah framework yang paling populer digunakan untuk membuat sebuah website. Bootstrap membuat front-end developer dapat membuat website dengan cepat, fokus pada responsive mobile, dan membuat website menjadi lebih interaktif tanpa membuat banyak CSS dan JavaScript dari nol.
|