Hari ini, dalam terjemahan bagian selanjutnya dari kursus pelatihan Bereaksi, kami membawa Anda pada pelajaran kedua tentang rendering bersyarat dan lokakarya tentang topik ini.

β 
Bagian 1: ikhtisar kursus, alasan popularitas React, ReactDOM dan JSXβ 
Bagian 2: komponen fungsionalβ 
Bagian 3: file komponen, struktur proyekβ 
Bagian 4: komponen induk dan anakβ 
Bagian 5: mulai bekerja pada aplikasi TODO, dasar-dasar gayaβ 
Bagian 6: tentang beberapa fitur kursus, JSX dan JavaScriptβ 
Bagian 7: gaya inlineβ 
Bagian 8: terus bekerja pada aplikasi TODO, terbiasa dengan sifat-sifat komponenβ 
Bagian 9: properti komponenβ 
Bagian 10: Workshop bekerja dengan properti komponen dan gayaβ 
Bagian 11: pembuatan markup dinamis dan metode susunan petaβ 
Bagian 12: lokakarya, pekerjaan tahap ketiga pada aplikasi TODOβ 
Bagian 13: komponen berbasis kelasβ 
Bagian 14: lokakarya tentang komponen berbasis kelas, status komponenβ 
Bagian 15: bengkel kesehatan komponenβ 
Bagian 16: tahap keempat dari pengerjaan aplikasi TODO, penanganan acaraβ 
Bagian 17: tahap kelima bekerja pada aplikasi TODO, memodifikasi status komponenβ 
Bagian 18: tahap keenam dari pengerjaan aplikasi TODOβ 
Bagian 19: metode siklus hidup komponenBagian 20: pelajaran pertama dalam rendering bersyaratβ 
Bagian 21: pelajaran kedua dan lokakarya tentang rendering bersyaratβ 
Bagian 22: tahap ketujuh bekerja pada aplikasi TODO, mengunduh data dari sumber eksternalβ 
Bagian 23: pelajaran pertama tentang bekerja dengan formulirβ 
Bagian 24: Pelajaran Bentuk Keduaβ 
Bagian 25: Workshop bekerja dengan formulirβ 
Bagian 26: arsitektur aplikasi, pola Container / Komponenβ 
Bagian 27: proyek kursusPelajaran 37. Penguraian Bersyarat, Bagian 2
β 
AsliDalam tutorial hari ini tentang rendering bersyarat, kita akan berbicara tentang menggunakan operator logis 
&& (Dan). Kami akan bereksperimen dengan proyek standar yang dibuat oleh create-react-app, dalam file 
App.js mana kode berikut berada:
 import React, {Component} from "react" class App extends Component {   constructor() {       super()       this.state = {           unreadMessages: [               "Call your mom!",               "New spam email available. All links are definitely safe to click."           ]       }   }   render() {       return (           <div>              <h2>You have {this.state.unreadMessages.length} unread messages!</h2>           </div>       )   } } export default App 
Sekarang aplikasi terlihat di browser seperti yang ditunjukkan di bawah ini.
Halaman aplikasi di browserAnda mungkin sudah menggunakan operator 
&& dalam konstruksi seperti 
true && false (yang memberi 
false ). Agar ekspresi 
true dikembalikan sebagai hasil dari menghitung ekspresi seperti itu, itu harus terlihat seperti 
true && true . Saat memproses ekspresi seperti itu, JavaScript menentukan apakah sisi kiri mereka benar, dan jika demikian, cukup kembalikan apa yang ada di sisi kanan mereka. Jika ekspresi bentuk 
false && false diproses, maka 
false akan segera dikembalikan, tanpa memeriksa sisi kanan ekspresi. Akibatnya, operator 
&& dapat digunakan dalam rendering bersyarat. Dengannya, Anda dapat mengembalikan sesuatu yang akan ditampilkan di layar, atau tidak mengembalikan apa pun.
Mari kita menganalisis kode aplikasi pelatihan.
Keadaan komponen 
App menyimpan larik string 
unreadMessages . Setiap baris dalam array ini mewakili pesan yang belum dibaca. Halaman ini menampilkan jumlah pesan yang belum dibaca, ditentukan berdasarkan panjang array. Jika array ini kosong, artinya, tidak akan ada elemen tunggal di dalamnya, maka aplikasi akan menampilkan apa yang ditunjukkan di bawah pada halaman.
Aplikasi memberi tahu kami bahwa tidak ada pesan yang belum dibacaUntuk mencapai efek ini, cukup membawa array ke formulir ini: 
unreadMessages: [] .
Jika tidak ada pesan yang belum dibaca, maka sangat mungkin untuk tidak menampilkan pesan sama sekali. Jika kami menggunakan operator ternary yang kami bicarakan 
terakhir kali untuk menerapkan perilaku aplikasi ini, metode 
render() komponen 
App dapat ditulis ulang sebagai berikut:
 render() {   return (       <div>           {               this.state.unreadMessages.length > 0 ?              <h2>You have {this.state.unreadMessages.length} unread messages!</h2> :               null           }       </div>   ) } 
Sekarang, jika array 
unreadMessages kosong, tidak ada yang akan ditampilkan pada halaman. Tetapi kode yang disajikan di sini dapat disederhanakan dengan menggunakan operator 
&& . Begini tampilannya:
 render() {   return (       <div>           {               this.state.unreadMessages.length > 0 &&              <h2>You have {this.state.unreadMessages.length} unread messages!</h2>           }       </div>   ) } 
Jika ada sesuatu dalam array, sisi kanan ekspresi ditampilkan pada halaman. Jika array kosong, tidak ada yang ditampilkan di halaman.
Ini bukan untuk mengatakan bahwa menggunakan operator 
&& dalam rendering bersyarat mutlak diperlukan, karena efek yang sama dapat dicapai dengan menggunakan operator ternary yang mengembalikan 
null jika kondisi yang diuji salah. Tetapi pendekatan yang disajikan di sini menyederhanakan kode, dan, di samping itu, cukup sering digunakan, sehingga Anda dapat menemukannya saat membaca program orang lain.
Pelajaran 38. Workshop. Render bersyarat
β 
Asliβ pekerjaan
Berikut adalah kode komponen fungsional 
App , yang disimpan dalam file 
App.js dari proyek standar yang dibuat menggunakan create-react-app.
 import React from "react" function App() {   return (       <div>           Code goes here       </div>   ) } export default App 
Anda perlu melakukan hal berikut:
- Konversikan kode komponen untuk melengkapinya dengan status.
- Pastikan bahwa status komponen akan berisi informasi tentang apakah pengguna "masuk" atau tidak (dalam latihan ini, "masuk" ke sistem dan "keluar" berarti hanya mengubah nilai terkait yang disimpan di negara bagian).
- Tambahkan ke halaman bahwa komponen membentuk tombol yang memungkinkan pengguna untuk masuk dan keluar.
 
 - Ini adalah tugas tambahan. Pastikan bahwa jika pengguna tidak masuk, tombol akan menampilkan LOG IN, dan jika itu log in,LOG OUT.
 
 
- Pada halaman yang dibentuk oleh komponen, Logged injika pengguna masuk, danLogged outjika tidakLogged out.
 
Jika sekarang Anda merasa sulit bagi Anda untuk mulai menyelesaikan masalah ini, lihat tipsnya dan mulai bekerja.
βTips
Untuk menyelesaikan tugas ini, Anda perlu mengingat banyak dari apa yang kita bicarakan di kelas sebelumnya. Untuk memulainya, komponen yang dapat memiliki status harus merupakan komponen yang didasarkan pada kelas. Komponen ini harus memiliki konstruktor. Dalam keadaan komponen, Anda dapat menyimpan properti logis, misalnya, itu bisa disebut 
isLoggedIn , nilainya, 
true atau 
false , menunjukkan apakah pengguna masuk atau tidak. Agar tombol yang perlu ditambahkan ke halaman yang dihasilkan oleh aplikasi untuk dapat melakukan fungsinya, itu akan memerlukan event 
onClick . Untuk menampilkan teks yang berbeda, berdasarkan pada perubahan nilai negara, perlu untuk menggunakan teknologi rendering bersyarat.
OlSolusi
Kami mengubah komponen fungsional yang tersedia dalam kode menjadi komponen berdasarkan kelas. Kami membutuhkan ini karena beberapa alasan. Pertama, kita perlu bekerja dengan keadaan aplikasi. Kedua, kita membutuhkan pengendali event yang dipanggil saat tombol diklik. Pada prinsipnya, Anda dapat menulis fungsi independen dan menggunakannya untuk menangani peristiwa tombol, tetapi saya lebih memilih untuk menggambarkan penangan dalam kelas komponen.
Berikut ini kode untuk komponen fungsional yang dikonversi menjadi komponen berbasis kelas. Di sini kita, dalam konstruktor komponen, menjelaskan keadaan awalnya, yang berisi properti 
isLoggedIn disetel ke 
false .
 import React from "react" class App extends React.Component {   constructor() {       super()       this.state = {           isLoggedIn: false       }   }   render() {          return (           <div>               Code goes here           </div>       )   } } export default App 
Kode di atas adalah solusi untuk bagian pertama dan kedua dari tugas. Sekarang kami akan bekerja untuk menambahkan tombol ke halaman yang ditampilkan oleh komponen. Sejauh ini, tombol ini akan menampilkan tulisan yang sama terlepas dari apa yang disimpan dalam status aplikasi. Kami akan melengkapinya dengan event handler, menempatkan di dalamnya, untuk memeriksa operabilitas kode kami, perintah sederhana untuk menampilkan pesan ke konsol. Selain itu, kami, dalam konstruktor komponen, akan mengikat penangan ini dengan 
this , yang berguna bagi kami ketika kami, dalam kode penangan ini, merujuk pada mekanisme yang dirancang untuk bekerja dengan keadaan komponen. Sekarang kodenya terlihat seperti di bawah ini.
 import React from "react" class App extends React.Component {   constructor() {       super()       this.state = {           isLoggedIn: false       }       this.handleClick = this.handleClick.bind(this)   }     handleClick() {       console.log("I'm working!")   }     render() {          return (           <div>               <button onClick={this.handleClick}>LOG IN</button>           </div>       )   } } export default App 
Ketika Anda mengklik tombol 
LOG IN , 
I'm working! .
Sekarang ingat bahwa kita perlu, ketika sebuah tombol 
isLoggedIn , properti 
isLoggedIn disimpan dalam status 
isLoggedIn dari 
true ke 
false dan sebaliknya. Untuk melakukan ini, di handler klik tombol, Anda harus memanggil fungsi 
this.setState() , yang dapat digunakan dalam dua cara. Yaitu, dapat diberikan, dalam bentuk objek, ide baru tentang apa yang harus terkandung dalam negara. Varian kedua penggunaannya menyediakan transfer ke fungsi yang mengambil status sebelumnya dari komponen dan membentuk yang baru, mengembalikan, lagi-lagi, objek. Kami akan melakukan hal itu. Itulah yang kami dapatkan pada tahap pekerjaan ini.
 import React from "react" class App extends React.Component {   constructor() {       super()       this.state = {           isLoggedIn: false       }       this.handleClick = this.handleClick.bind(this)   }     handleClick() {       this.setState(prevState => {           return {               isLoggedIn: !prevState.isLoggedIn           }       })   }     render() {          return (           <div>               <button onClick={this.handleClick}>LOG IN</button>           </div>       )   } } export default App 
Di sini kita dapat menggunakan konstruksi if-else, tetapi kita hanya mengonversi 
true menjadi 
false dan 
false ke 
true menggunakan operator logis 
! (TIDAK).
Sejauh ini, kami tidak memiliki mekanisme yang, berdasarkan pada apa yang disimpan di negara bagian, akan memungkinkan kami untuk memengaruhi tampilan aplikasi. Karena itu, sekarang kita akan menyelesaikan tugas tambahan tugas nomor 3. Yaitu, kami akan membuat label pada tombol berubah tergantung pada status komponen. Untuk mencapai ini, Anda dapat mendeklarasikan variabel dalam metode 
render() yang nilainya, 
LOG IN atau 
LOG OUT , tergantung pada apa yang disimpan di negara bagian. Nilai ini kemudian dapat digunakan sebagai teks tombol. Ini tampilannya.
 import React from "react" class App extends React.Component {   constructor() {       super()       this.state = {           isLoggedIn: false       }       this.handleClick = this.handleClick.bind(this)   }     handleClick() {       this.setState(prevState => {           return {               isLoggedIn: !prevState.isLoggedIn           }       })   }     render() {         let buttonText = this.state.isLoggedIn ? "LOG OUT" : "LOG IN"       return (           <div>               <button onClick={this.handleClick}>{buttonText}</button>           </div>       )   } } export default App 
Sekarang mari kita ambil bagian keempat dari tugas ini. Kami akan menampilkan teks pada halaman tergantung pada apakah pengguna masuk atau tidak. Bahkan, mengingat semua yang sudah ada dalam kode komponen, menyelesaikan masalah ini sangat sederhana. Di bawah ini adalah kode selesai untuk file 
App.js import React from "react" class App extends React.Component {   constructor() {       super()       this.state = {           isLoggedIn: false       }       this.handleClick = this.handleClick.bind(this)   }     handleClick() {       this.setState(prevState => {           return {               isLoggedIn: !prevState.isLoggedIn           }       })   }     render() {         let buttonText = this.state.isLoggedIn ? "LOG OUT" : "LOG IN"       let displayText = this.state.isLoggedIn ? "Logged in" : "Logged out"       return (           <div>               <button onClick={this.handleClick}>{buttonText}</button>               <h1>{displayText}</h1>           </div>       )   } } export default App 
Seperti inilah tampilan aplikasi di browser.
Halaman aplikasi di browserMengklik tombol 
LOG IN ditunjukkan pada gambar sebelumnya akan mengubah status aplikasi, setelah itu 
LOG OUT ditampilkan pada tombol, dan teks ditampilkan pada halaman yang memberi tahu pengguna bahwa ia login.
Ringkasan
Hari ini kami terus berbicara tentang perenderan bersyarat, memeriksa penggunaan operator 
&& , dan menyelesaikan tugas praktis yang melibatkan banyak mekanisme yang kami pelajari. Lain kali, Anda akan terus bekerja pada aplikasi-Todo dan topik baru.
Pembaca yang budiman! Sudahkah Anda mengatasi tugas praktis hari ini?