flash sale
hamburger-menu

Tips Frontend Development

Meningkatkan skills menjadi 1% lebih baik

Kelas Berkenalan Dengan Alpine JS di BuildWithAngga

Berkenalan Dengan Alpine JS

Alpine JS merupakan sebuah lightweight framework Javascript yang tergolong baru dibandingkan dengan framework seperti React atau Vue. Meskipun demikian, Alpine JS menyediakan beberapa kelebihan seperti ukuran yang kecil yakni hanya 8KB dan memberikan kemudahan bagi para developer untuk membuat website interaktif tanpa harus menuliskan file Javascript secara terpisah. Dengan Alpine.js, kamu bisa mendapatkan fitur seperti manipulasi state, event dan bahkan logic Javascript yang dimana hanya dilakukan langsung pada file HTML. Beberapa contoh penggunaan Alpine JS adalah kita dapat membuat komponen dinamis seperti dropdown, tombol, navigasi, dan tanpa perlu menggunakan framework seperti React atau Vue Instalasi Untuk menggunakan Alpine JS, kamu dapat membuka website dokumentasi resminya disini. Lalu silahkan copy link CDN yang terdapat pada website tersebut kedalam tag head file html kamu. <script src="//unpkg.com/alpinejs" defer></script> Hanya untuk keperluan user interface, kita akan menggunakan Tailwind CSS sebagai proses styling. <script src="https://cdn.tailwindcss.com"></script> Fitur Fitur yang disediakan oleh Alpine JS disebut Directive. Alpine JS memiliki 15 directive yang dapat kita gunakan, seperti: x-data, x-on, x-show,x-for, dan masih banyak lagi. a. Data / x-data Kita dapat menyisipkan data seperti variabel yang kemudian digunakan kedalam elemen HTML secara mudah menggunakan Alpine JS, berikut contohnya: <div x-data="{ username: 'John Doe' }"> <img src="https://api.dicebear.com/7.x/adventurer/svg?seed=Angel" alt="avatar" width="30" /> <span>Username <span x-text="username"></span> </span> </div> Akan didapatkan: Perhatikan pada kode tersebut kita menggunakan 2 directive yang disediakan oleh Alpine JS yaitu x-data dan x-text. x-data merupakan sebuah directive yang berfungsi untuk menampung semua data dan logic yang akan digunakan. x-text merupakan directive yang berfungsi untuk mencetak atau mengeluarkan nilai yang terdapat pada blok kode x-data, hal ini mirip seperti console.log pada Javascript hanya saja kita mencetak nilainya langsung pada file HTML kita. b. Event / x-on Click Event click merupakan salah satu event atau peristiwa yang terjadi ketika user melakukan ‘click’ terhadap elemen HTML. Apabila kamu ingin menerapkan event tersebut, kamu bisa memanfaatkan directive x-on:click atau @click yang sudah disediakan oleh Alpine JS. Contoh penggunaan event Click ini bisa sering kita temukan seperti dropdown item; <div x-data="{ open: false }" x-on:click.outside="open = false" class="flex flex-col justify-center items-center"> <button x-on:click="open = !open" class="py-1 px-8 rounded-md bg-white text-black box-shadow mb-3"> Options <i class="fa-solid fa-chevron-down"></i> </button> <ul x-show="open" class="box-shadow rounded-md bg-white"> <li class="rounded-md py-2 px-7"><a href="#">New Task</a></li> <li class="rounded-md py-2 px-7"><a href="#">Edit Task</a></li> <li class="rounded-md py-2 px-7"><a href="#" class="text-red-600">Delete Task</a></li> </ul> </div> Show x-show merupakan directive yang disediakan oleh Alpine JS yang berfungsi untuk memunculkan dan menyembunyikan suatu elemen HTML. <div x-data="{ isOpen: false }"> <button x-on:click="isOpen = !isOpen" class="py-2 px-6 rounded-md border">Click Me</button> <div x-show="isOpen" class="mt-4 border rounded-md p-4 bg-gray-200"> <p>Ini adalah konten yang muncul saat tombol diklik.</p> </div> </div> Apabila button tersebut di-klik akan didapatkan: Keyup / Keydown Pernahkah kamu ketika mengisi form dan ketika selesai mengisi semua input lalu menekan tombol enter maka form tersebut langsung terkirim? Yup, hal tersebut merupakan implementasi yang dapat kita terapkan untuk mempermudah user melakukan sebuah task. Ketika menggunakan Alpine JS, kita bisa menerapkan hal demikian dengan menggunakan directive bernama x-on:keyup atau x-on:keydown. Sebagai contoh di atas, maka bisa kita terapkan: <div class="flex justify-center items-center"> <form x-data="" x-on:submit.prevent="alert('Submitted')" action="/foo" method="post"> <input type="text" name="" placeholder="Search" id="" class="py-2 px-6 rounded-md box-shadow" /> <button type="submit" class="py-2 px-6 rounded-md border">Search</button> </form> </div> Berikut ini beberapa event keyboard yang sering dijumpai ModifierKeyboard Key.shiftShift.enterEnter.spaceSpace.ctrlCtrl.cmdCmd.metaCmd on Mac, Windows key on Windows.altAlt.up .down .left .rightUp/Down/Left/Right arrows.escapeEscape.tabTab.caps-lockCaps Lock.equalEqual, =.periodPeriod, ..slashForward Slash, / C. Logic Perulangan Kita bisa menerapkan proses perulangan langsung pada file HTML ketika menggunakan Alpine JS, seperti setelah melakukan data fetching dan lain-lain. Untuk melakukan proses perulangan, Alpine JS menyediakan directive bernama x-for, Berikut contoh implementasinya: <ul x-data="{ colors: ['Red', 'Orange', 'Yellow'] }" class="list-decimal"> <template x-for="color in colors"> <li x-text="color"></li> </template> </ul> Akan didapatkan: Terlihat pada kode tersebut kita menggunakan tag template ketika menggunakan perulangan pada Alpine JS, hal ini bertujuan untuk mencegah konten didalamnya ditampilkan kepada user sebelum halaman tersebut di load secara keseluruhan. Kemudian perlu diperhatikan yaitu ketika menggunakan tag template pada perulangan x-for dalam Alpine JS, ia hanya menerima satu root elemen, untuk lebih jelasnya seperti ini: Kode di bawah ini tidak akan bekerja: <template x-for="color in colors"> <span>The next color is </span><span x-text="color"> </template> Namun kode ini akan bekerja: <template x-for="color in colors"> <p> <span>The next color is </span><span x-text="color"> </p> </template> Percabangan Percabangan atau pengkondisian pada Alpine JS bisa kita terapkan dengan menggunakan directive bernama x-if. Berikut ini contoh implementasi sederhananya: <div x-data="{ login: false }"> <!-- Jika variabel login bernilai False --> <template x-if="!login"> <ul class="flex items-center gap-2"> <li>Login</li> <li> <button class="py-2 px-5 rounded-md bg-teal-400 text-white">Register</button> </li> </ul> </template> <!-- Jika variabel login bernilai True--> <template x-if="login"> <ul class="flex items-center gap-2"> <li class="flex items-center gap-2"> <img src="https://api.dicebear.com/7.x/adventurer/svg?seed=Angel" alt="avatar" width="30" /> <span class="font-bold">John Doe</span> <i class="fa-solid fa-chevron-down"></i> </li> </ul> </template> </div> Maka apabila variabel login bernilai True, akan didapatkan tampilan seperti ini: Jika bernilai False, maka: Kesimpulan Bagaimana menurut kamu? Cukup sederhana dan mudah di implementasi bukan? Alpine JS merupakan sebuah terobosan baru untuk membangun sebuah interaktif website tanpa harus menggunakan framework besar seperti React atau Vue. Bagi kamu yang ingin mempelajari lebih lanjut dunia web development, saya rekomendasikan untuk bergabung pada kelas premium yang disediakan oleh BuildWithAngga. Ketika bergabung kamu akan mempelajari mulai dari basic hingga studi kasus pengembangan website yang berstandar industri. Tunggu apalagi dan sampai jumpa di kelas👋

Kelas Membuat Elemen Card Dengan SCSS di BuildWithAngga

Membuat Elemen Card Dengan SCSS

Pada artikel kali ini kita akan menerapkan studi kasus dengan membuat elemen card sederhana setelah Berkenalan Dengan SCSS dan SASS dan bagaimana Menggunakan SCSS/SASS pada file HTML. Persiapan Kita akan membuat project ini dengan menggunakan Vs Code. Apabila kamu belum menginstallnya maka bisa men-download disini. Lalu untuk referensi design akan menggunakan dari link figma community disini. Let’s Code 1. Untuk menyamakan project yang akan dibangun, silakan kamu ikuti pembuatan struktur folder dan file berikut: Untuk file image bisa kamu ganti dengan sesuai yang kamu inginkan. Apabila ingin sama persis silakan download image tersebut pada link figma community sebelumnya. 2. Kemudian pastikan sudah menginstall extension Live Sass Compiler pada Vs Code kamu karena kita akan melakukan kompilasi/perubahan dari file SCSS ke format CSS dengan menggunakan extension ini. 3. Lalu pada file index.html, silakan buat struktur HTML berikut: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Belajar Elemen Card Dengan SCSS</title> <!-- Font Inter --> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet" /> <!-- CSS hasil kompilasi --> <link rel="stylesheet" href="./scss/style.css" /> </head> <body> <div class="card"> <div class="card-image"> <img src="./image/image.png" alt="Card Image" /> </div> <div class="card-body"> <div class="card-body-title">Headline</div> <p> Write an amazing description in this dedicated card section. Each word counts. </p> </div> <div class="card-footer"> <button>See More</button> </div> </div> </body> </html> Apabila kita buka file tersebut ke browser akan didapatkan: Masih belum nyaman dilihat bukan, maka pada langkah selanjutnya mari kita proses styling elemen tersebut🖌 Styling It Setelah membuat struktur HTML, silakan kamu buka file style.scss nya dan ikuti langkah di bawah. 1. Buka file style.scss kamu, dan klik tanda Watch SASS, pada bagian bawah bar Vs Code Jika sudah maka akan muncul 2 buah file sebagai berikut: Maka sampai sini kamu sudah berhasil melakukan proses kompilasi dari file SCSS ke file CSS. 2. Persiapkan Variabel Color dan Font Weight Pada langkah ini kita mempersiapkan variabel yang akan digunakan pada elemen card tersebut: // Color Variabel $background-color: #e5e5e5; $gray: #425466; $purple: #4c6fff; // Font Weight $regular: 400; $semi-bold: 600; 3. Lakukan persiapan styling pada background dan semua elemen // Global * { box-sizing: border-box; } // Styling Body body { background-color: $background-color; } Pada kode tersebut terdapat selector universal yaitu *, selector tersebut akan memengaruhi semua elemen di dalam halaman file HTML dan didalamnya terdapat aturan yaitu penggunaan box-sizing: border-box; untuk memastikan bahwa lebar dan tinggi elemen mencakup padding dan border, bukan hanya content di dalamnya. 4. Styling Elemen Card .card { width: 350px; height: 400px; padding: 8px; border-radius: 16px; background-color: white; font-family: "Inter", sans-serif; ... } Kode tersebut merupakan aturan standar pada CSS yang dapat digunakan untuk menerapkan styling pada elemen card. Maka apabila kita buka file HTML tersebut kedalam browser didapatkan: Sudah mulai terlihat design nya bukan? Lalu coba kamu perhatikan kode HTML card sebelumnya: <div class="card"> <div class="card-image"> <img src="./image/image.png" alt="Card Image" /> </div> <div class="card-body"> <div class="card-body-title">Headline</div> <p> Write an amazing description in this dedicated card section. Each word counts. </p> </div> <div class="card-footer"> <button>See More</button> </div> </div> Terlihat pada elemen card tersebut memiliki children/items di dalamnya, maka dengan ini bisa kita manfaatkan fitur ajaib dari SCSS yaitu Nesting. 5. Proses styling dengan fitur Nesting Untuk melakukan styling pada class .card-image maka dengan menggunakan SCSS dapat dilakukan sebagai berikut: .card { width: 350px; height: 400px; padding: 8px; border-radius: 16px; background-color: white; font-family: "Inter", sans-serif; // Manfaatkan fitur nesting pada SCSS // &-image = card-image , karena berada dalam satu elemen dengan parent yang sama &-image { width: 100%; } ... } Tanda & dalam kode SCSS digunakan untuk merujuk pada "parent selector". Hal ini memungkinkan kamu untuk menyatukan selector parent dengan selector children untuk modifikasi di dalam file SCSS. Jadi ketika file SCSS di compile, maka tanda &-image akan menjadi .card-image. Mulai paham kan? Mari kita manfaatkan fitur ini untuk bagian .card-body dan .card-footer maka implementasinya: // Styling Card .card { ... &-body { margin: 24px; &-title { font-weight: $semi-bold; } p { color: $gray; font-size: 14px; } } &-footer { margin: 24px; button { width: 95px; height: 36px; border-radius: 10px; background-color: $purple; border: none; color: white; } } } Hingga didapatkan kode lengkap style.scss sebagai berikut: // Color Variabel $background-color: #e5e5e5; $gray: #425466; $purple: #4c6fff; // Font Weight $regular: 400; $semi-bold: 600; // Global * { box-sizing: border-box; } // Styling Body body { background-color: $background-color; } // Styling Card .card { width: 350px; height: 400px; padding: 8px; border-radius: 16px; background-color: white; font-family: "Inter", sans-serif; // Manfaatkan fitur nesting pada SCSS &-image { width: 100%; } &-body { margin: 24px; &-title { font-weight: $semi-bold; } p { color: $gray; font-size: 14px; } } &-footer { margin: 24px; button { width: 95px; height: 36px; border-radius: 10px; background-color: $purple; border: none; color: white; } } } Lalu apabila kamu cek file style.css hasil kompilasi file SCSS tersebut, didapatkan: * { -webkit-box-sizing: border-box; box-sizing: border-box; } body { background-color: #e5e5e5; } .card { width: 350px; height: 400px; padding: 8px; border-radius: 16px; background-color: white; font-family: "Inter", sans-serif; } .card-image { width: 100%; } .card-body { margin: 24px; } .card-body-title { font-weight: 600; } .card-body p { color: #425466; font-size: 14px; } .card-footer { margin: 24px; } .card-footer button { width: 95px; height: 36px; border-radius: 10px; background-color: #4c6fff; border: none; color: white; }/*# sourceMappingURL=style.css.map */ Terlihat extension tersebut sudah berhasil melakukan proses kompilasi dan apabila kita buka file HTML pada browser didapatkan hasil berikut: Taraa✨, selamat kamu sudah berhasil membuat elemen card sederhana menggunakan SCSS. Kesimpulan Sampai sini mulai seru bukan menggunakan SCSS? Maka saran saya kamu harus lebih banyak melakukan studi kasus berbeda agar lebih terbiasa dalam menggunakan fitur-fitur yang disediakan oleh SCSS ini. Oiya saya juga menyarankan apabila kamu ingin lebih expert dalam bidang web development, bisa bergabung pada kelas-kelas yang disediakan oleh BuildWithAngga. Kamu bisa mengakses nya secara gratis disini dan apabila ingin memperdalam lebih lanjut silakan bergabung pada kelas pro yang sudah disediakan. Tunggu apalagi dan saya tunggu kamu dikelas yaa😍

Kelas Cara Menggunakan SCSS/SASS Pada HTML di BuildWithAngga

Cara Menggunakan SCSS/SASS Pada HTML

Secara default browser yang kita gunakan hanya mensupport proses styling menggunakan CSS saja. Maka dari itu setelah kita belajar Berkenalan Dengan SCSS/SASS, langkah selanjutnya ialah kita akan melakukan kompilasi atau merubah file SCSS tersebut menjadi file CSS agar bisa digunakan oleh browser. 1. Menggunakan Extension Jika kamu menggunakan VS Code, maka kamu bisa langsung melakukan proses kompilasi dengan menginstal extension yang sudah disediakan yaitu: Live Sass Compiler Kemudian buka file SCSS/SASS kamu, lalu perhatikan pada pojok bawah kanan pada tampilan VS Code akan terlihat button bernama Watch SASS. Tinggal kamu klik button tersebut maka secara otomatis extension ini akan melakukan proses kompilasi file SCSS/SASS menjadi file CSS. Setelah berhasil akan dihasilkan file berikut: Kamu perlu menggunakan file bernama style.css saja karena file lainnya hanya berfungsi untuk melakukan proses kompilasi ulang ketika terjadi perubahan pada file SCSS kamu. 2. Menggunakan Compiler Online Cara kedua yaitu kamu bisa menggunakan compiler online untuk merubah file SCSS menjadi CSS dengan cara mengunjungi website berikut: https://sass-lang.com/playground/ Maka kode SCSS kita sudah di kompilasi oleh website tersebut dan bisa langsung copy paste lalu kita gunakan pada file CSS kita. 3. Menggunakan Command Line Cara terakhir yaitu kita bisa menggunakan command line untuk melakukan proses kompilasi dengan instalasi library: sass npm install -g sass Kemudian lakukan proses watching yaitu agar proses compile file akan terus berjalan walau terjadi perubahan pada file SCSS tersebut. sass style.scss style.css Maka didapatkan file seperti ini: Dan apabila kita perhatikan, hasilnya sama seperti langkah nomor satu bukan? Karena behind the scene apa yang dilakukan pada langkah pertama dan ketiga adalah mereka melakukan proses kompilasi yang sama. Maka dari hasil kompilasi tersebut, kamu bisa menggunakan style.css sebagai file utama CSS yang akan digunakan pada HTML. Namun perlu diperhatikan ketika menggunakan command line pastikan pada device kamu sudah terpasang aplikasi NodeJS, dan jika belum kamu bisa mendownload nya disini: https://nodejs.org/en Kesimpulan Selamat, sampai disini kamu telah berhasil menggunakan file SCSS/SASS kedalam file HTML. Langkah selanjutnya ialah kamu tetap perlu mengembangkan skill styling web development agar dapat menghasilkan website yang eye catching dan nyaman digunakan oleh pengguna. Berbicara tentang website, pada BuildWithAngga terdapat kelas yang dapat digunakan untuk membantu dan mendukung perkembangan skill web development. Kamu bisa akses kelas tersebut secara gratis disini atau jika ingin memperdalam lebih lanjut kamu bisa bergabung pada kelas premium yang disediakan BuildWithAngga. Tunggu apalagi ayo bergabung dan sampai jumpa dikelas!

Kelas Berkenalan Dengan SCSS/SASS di BuildWithAngga

Berkenalan Dengan SCSS/SASS

SCSS atau SASS merupakan singkatan dari Syntactically Awesome Stylesheets yang merupakan preprocessor dari CSS. Ketika menggunakan preprocessor kita dapat memiliki keleluasaan lebih dalam melakukan proses styling seperti pembuatan variabel, nesting, partials, mixins dan lain-lain yang tentu tidak bisa dilakukan oleh CSS biasa. Perbedaan antara SCSS dan SASS Terdapat dua cara dalam apabila ingin menggunakan SCSS atau SASS, yaitu: 1. SCSS Apabila ingin menggunakan SCSS, maka kita perlu membuat sebuah file dengan berekstensikan .scss. Dan untuk penulisan sintaks-nya sama seperti CSS native pada umumnya. .container { max-width: 576px; margin: auto; } .button { padding: 10px; border-radius: 2px; border: 1px solid black; } 2. SASS Kemudian apabila ingin menggunakan SASS, kita perlu membuat file tersebut dengan berekstensikan .sass. Perbedaan antara SCSS dan SASS terletak pada penulisannya. Untuk SCSS menggunakan kurung kurawal seperti CSS pada umumnya, sedangkan untuk SASS menggunakan identasi seperti python dalam penulisannya. .container max-width: 576px; margin: auto; .button padding: 10px; border-radius: 2px; border: 1px solid black; Fitur Yang Dimiliki Berikut ini beberapa fitur dari SCSS/SASS yang dapat kita manfaatkan: 1. Variabel Apabila ingin membuat variabel dalam SCSS dapat dilakukan dengan cara seperti ini: $red-100: #fee2e2; $red-200: #fecaca; $red-300: #fca5a5; $red-400: #f87171; Kemudian penggunaannya: button{ background-color: $red-300; } Dan perlu diingat dalam membuat variabel, kamu harus membuatnya dengan menggunakan tanda $ kemudian diikuti dengan nama variabel nya lalu ditutup dengan titik koma. 2. Nesting Kemudian terdapat fitur Nesting, yaitu memungkinkan kita melakukan grouping dalam proses styling. Berikut contoh penggunaan nesting untuk membuat navbar sederhana: index.html <nav> <ul> <li> <a href="">Dashboard</a> </li> <li> <a href="">Profile</a> </li> </ul> </nav> Maka apabila menggunakan SCSS didapatkan: SCSS nav { ul { margin: 0; padding: 0; list-style: none; } li { display: inline-block; } a { display: block; padding: 6px 12px; text-decoration: none; } } CSS nav ul { margin: 0; padding: 0; list-style: none; } nav li { display: inline-block; } nav a { display: block; padding: 6px 12px; text-decoration: none; } Terlihat pada file CSS tersebut, kita melakukan proses pemanggilan berulang pada kata kunci nav, sedangkan ketika menggunakan SCSS dapat dengan melakukan proses grouping sehingga tidak perlu memanggil kata kunci tersebut. Tentu saja hal ini menghasilkan kode yang nyaman dibaca. Perlu diingat ketika menggunakan fitur nesting pastikan elemen children di bawahnya masih dalam satu lingkup yang sama. 3. Partials / Modules Menganut prinsip Separate of Concern, kita dapat membuat sebuah module atau file SCSS terpisah untuk setiap bagian elemen HTML. Untuk membuat module pada SCSS, perlu menambahkan tanda underscore lalu diikuti dengan nama file tersebut. Sebagai contoh: _navbar.scss // _navbar.scss nav { ul { margin: 0; padding: 0; list-style: none; } li { display: inline-block; } a { display: block; padding: 6px 12px; text-decoration: none; } } style.scss // style.scss @use "navbar"; .container { max-width: 576px; margin: auto; } Terlihat pada kode di atas apabila ingin menggunakan module, maka dapat memanggilnya dengan kata kunci @use, dan pastikan file tersebut masih berada dalam satu folder yang sama. Apabila terdapat perbedaan hierarki pada file tersebut, maka relative path berlaku seperti CSS pada umumnya. 4. Mixins Mixin memungkinkan kita membuat sebuah block styling yang dapat digunakan secara berulang pada satu elemen dan elemen lainnya. Berikut ini contohnya: SCSS @mixin button($theme:red) { background-color: ($theme); padding: 2px 10px 2px 10px; border-radius: 3px; text-align: center; font-weight: bold; border: 1px solid black; } .button-info { @include button('blue'); } .button-danger{ @include button('red'); } CSS .button-info { background-color: "blue"; padding: 2px 10px 2px 10px; border-radius: 3px; text-align: center; font-weight: bold; border: 1px solid black; } .button-danger { background-color: "red"; padding: 2px 10px 2px 10px; border-radius: 3px; text-align: center; font-weight: bold; border: 1px solid black; } Pada kode di atas hanya perlu membuat satu block khusus yang memuat segala proses styling yang akan digunakan, lalu memanggil block tersebut dengan kata kunci @include pada elemen yang ingin diterapkan. Dengan menggunakan mixin memungkinkan kita menyisipkan sebuah parameter, sehingga membuatnya unik satu sama yang lain. Hal ini mirip seperti function dalam bahasa pemrograman pada umumnya. 5. Extended / Inheritance Sama seperti mixin, kita dapat membuat sebuah block khusus yang menyimpan property dan value css yang dapat digunakan secara berulang. Namun terdapat perbedaannya dalam penggunaannya, perhatikan kode berikut: // Membuat parent yang berisikan property dan value CSS %button { padding: 2px 10px 2px 10px; border-radius: 3px; text-align: center; font-weight: bold; border: 1px solid black; } // Digunakan dalam variant button .button-danger { @extend %button; background-color: red; } .button-success { @extend %button; background-color: green; } Perbedaan antara mixin dan sifat pewarisan yaitu, apabila menggunakan mixin maka kita perlu membuat sebuah parameter di dalamnya agar menjadikan elemen tersebut dinamis. Sedangkan untuk pewarisan sifat hanya menurunkan property dan value dari block styling tersebut terhadap elemen lainnya tanpa dapat menyisipkan parameter di dalamnya. 6. Operator Apabila ingin menggunakan operator seperti +, -, , math.div(), dan %, maka kita perlu menyisipkan kode seperti di bawah ini: SCSS **@use "sass:math";** .container { display: flex; } article[role="main"] { width: math.div(600px, 960px) * 100%; } aside[role="complementary"] { width: math.div(300px, 960px) * 100%; margin-left: auto; } SCSS .container { display: flex; } article[role=main] { width: 62.5%; } aside[role=complementary] { width: 31.25%; margin-left: auto; } Terlihat pada kode SCSS di atas, kita memanggil salah satu module bawaan dari SCSS yaitu use:math, maka dengan ini bisa menerapkan fungsi matematika dalam proses styling yang akan diterapkan. Kesimpulan Mulai tertarik menggunakan preprocessor CSS ini? Tentu saja untuk dapat menggunakannya kita hanya perlu memahami dasar-dasar CSS agar bisa diterapkan pada project yang akan dibangun. Dan kamu perlu memperbanyak latihan agar lebih terbiasa dengan fitur-fitur yang disediakan oleh preprocessor ini. Apabila kamu tertarik dan ingin belajar lebih lanjut tentang web development, saya merekomendasikan untuk bergabung pada kelas gratis di BuildWithAngga, karena di dalamnya terdapat mentor-mentor berkualitas yang mendukung proses belajar hingga menjadikan kita sebagai developer yang dapat bersaing dalam dunia industri. Semoga beruntung dan sampai jumpa di kelas!

Kelas 10 Utility Tailwind CSS Sering Digunakan di BuildWithAngga

10 Utility Tailwind CSS Sering Digunakan

Tailwind merupakan framework css yang berbasis utility yang di desain untuk mempermudah dan mempercepat pembuatan aplikasi dengan menggunakan desain yang customizable. Karena berbasis utility maka kita harus melakukan proses slicing komponen yang akan dibentuk dengan memasukkan class nya satu persatu hingga membentuk suatu kesatuan elemen. Mungkin terdengar rumit ya? Tenang saja tidak se-rumit itu kok, bahkan hampir seluruh proyek besar industri semuanya menggunakan Tailwind sebagai base styling mereka. Mari kita bahas utility apa saja yang akan sering kita temui ketika menggunakan framework satu ini. 1. Container Container dalam Tailwind CSS merupakan sebuah pembungkus atau wrapper semua item di dalamnya, sehingga terlihat lebih rapi dan ter kelompok. Apabila kita ingin menggunakan container pada Tailwind, kita bisa menggunakan utility bernama container. Berikut implementasinya: <div class="container"> <div>1</div> <div>2</div> <div>3</div> </div> Dan apabila kamu ingin membuat sebuah container berada persis dalam tengah halaman, kita bisa menambahkan salah satu utility lagi yaitu mx-auto. Maka implementasinya: <div class="container mx-auto flex"> <div class="w-1/2 h-52 bg-red-100">Left Side</div> <div class="w-1/2 h-52 bg-orange-100">Right Side</div> </div> Didapatkan hasil: Untuk lebih jelasnya silakan kamu baca dokumentasinya di sini: Tailwind CSS - Container 2. Padding Padding merupakan ruang antar content dan border pada suatu elemen. Ketika menggunakan Tailwind kita dapat dengan mudah menerapkan padding dengan memanggil utility nya yaitu p-[value]. Berikut implementasinya: <button class="p-10">Some Button<button> Semakin besar nilai yang kita berikan maka semakin luas pula padding yang dihasilkan. Untuk nilai yang bisa kita gunakan ke dalam padding tersebut bisa kamu cek di sini: Tailwind CSS - Padding 3. Margin Berbeda dengan padding yang merupakan ruang antara content dan border, margin adalah kebalikannya. Margin merupakan jarak antara satu elemen terhadap elemen HTML lainnya. Ketika kita menggunakan Tailwind, kita dapat menerapkan jarak antar elemen dengan memanggil utility yaitu m-[value]. Berikut implementasinya: <div class="m-10">Some Content</div> Nilai yang bisa kita berikan kepada margin hampir sama seperti padding; semakin besar nilai yang kita berikan, maka semakin lebar pula jarak antar elemen tersebut. Untuk lebih jelasnya silakan kamu cek dokumentasi berikut: Tailwind CSS - Margin 4. Grid Grid merupakan salah satu property pada CSS yang bertujuan untuk mempermudah melakukan proses layouting. Tailwind memiliki utility bernama grid untuk memberikan sifat grid terhadap elemen yang ingin kita terapkan. Berikut implementasinya: <div class="grid"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Perlu diingat apabila kamu ingin menggunakan grid untuk proses layout nya, maka kamu juga harus paham seperti bagaimana membuat kolom dan baris pada grid system. Tailwind sendiri memiliki utility untuk mengatur baris pada elemen yang menggunakan grid layout yang bernama grid-rows-[value]. <div class="grid grid-rows-2"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Kemudian apabila kamu ingin mengatur kolom pada elemen yang menggunakan grid layout kita bisa menggunakan utility grid-cols-[value]. <div class="grid grid-rows-2 grid-cols-2"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Dan untuk mengatur jarak antar items di dalam container, kita bisa menggunakan utility bernama gap. Hingga di dapatkan hasil akhir seperti ini: <div class="grid grid-rows-2 grid-cols-2 gap-5"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Untuk lebih jelasnya mari kita lihat dokumentasi resmi nya di sini: Tailwind CSS - Grid Columns. , Tailwind CSS - Grid Rows. dan Tailwind CSS - Gap. 5. Flexbox Sama seperti grid, Flex atau Flexbox merupakan salah satu property CSS yang bertujuan untuk mempermudah proses layouting. Kita bisa menerapkan sifat flex terhadap elemen yang ingin kita terapkan dengan menggunakan utility flex. <div class="flex"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Kita juga bisa terapkan gap pada flex container. Maka didapatkan hasil seperti ini: <div class="flex gap-5"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Maka kita sudah berhasil menerapkan sifat flex pada elemen div di atas. 6. Justify Content Justify Content merupakan property pada CSS yang berfungsi untuk mengatur tata letak item di dalam container flex atau grid secara horizontal. Kita bisa mengatur posisi item tersebut menggunakan utility Tailwind yang bernama justify-[value]. <div class="flex justify-center/evenly/between/end/start"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Untuk tahu detil nilai apa saja yang bisa kita terapkan, silakan kamu lihat dokumentasi: Tailwind CSS - Justify Content 7. Align Items Berbeda dengan Justify Content yang mengatur item secara horizontal, Align Items mengatur item secara vertikal baik itu di dalam container flex atau pun grid. Kita bisa menggunakan align items pada Tailwind dengan cara sebagai berikut: <div class="flex items-start/end/center/baseline/stretch"> <div class="w-52 h-52 bg-red-100 mb-3">Kotak 1</div> <div class="w-52 h-52 bg-violet-100">Kotak 2</div> </div> Untuk lebih jelasnya silakan kamu lihat dokumentasi di sini: Tailwind CSS - Align Items 8. Border Radius Border radius merupakan property CSS yang mengatur sudut lengkung pada suatu elemen. Tailwind menyediakan utility bernama rounded agar kita bisa mengatur seberapa besar lengkungan sudut yang akan diberikan pada elemen tersebut. Contoh implementasinya sebagai berikut: <button class="py-2 px-10 rounded-lg border border-2 border-green-400 bg-green-100 text-green-700 shadow-md">Success</button> 9. Color Berterimakasihlah kita kepada developer Tailwind CSS, karena mereka sudah menyediakan banyak color palette yang bisa kita gunakan secara gratis dan mudah digunakan. Lalu bagaimana cara menggunakan color palette tersebut terhadap elemen kita? Berikut implementasi penggunaannya: Background Color Apabila kita ingin memberikan warna terhadap background, maka kita bisa mengimplementasikan seperti ini: <div class="py-2 px-6 rounded-md bg-purple-100">Some Case</div> Text Color Apabila ingin memberikan warna terhadap text maka: <div class="py-2 px-6 rounded-md bg-purple-100 text-purple-600">Some Case</div> Border Color Kemudian apabila kita ingin memberikan warna pada border, kita bisa melakukannya seperti ini: <div class="py-2 px-6 rounded-md bg-purple-100 text-purple-600 border border-purple-600">Some Case</div> Maka di dapatkan hasil seperti ini: 10. Responsive Utility Last but not least, responsive utility bertanggung jawab untuk menjadikan elemen yang kita miliki mempunyai sifat responsive, yaitu dapat diposisikan nya elemen sesuai dengan lebar layar device yang digunakan. Hal ini juga sangat penting karena pada saat kita menggunakan Tailwind CSS secara tidak langsung kita harus mengikuti prinsip mobile-first design, yaitu di mana kita harus melakukan proses slicing design untuk ukuran mobile terlebih dahulu kemudian ukuran tablet dan seterusnya. Berikut responsive utility yang disediakan: Breakpoints PrefixMinimum WidthCSSsm640px@media (min-width: 640px) { ... }md768px@media (min-width: 768px) { ... }lg1024px@media (min-width: 1024px) { ... }xl1280px@media (min-width: 1280px) { ... }2xl1536px@media (min-width: 1536px) { ... } Sekarang perhatikan kode di bawah ini: <div class="bg-red-100 p-3 rounded-xl sm:bg-purple-100 md:bg-orange-100 lg:bg-violet-100"> <div class="text-center"> <h1 class="block sm:hidden font-bold">Teks ini muncul hanya pada ukuran mobile</h1> <h1 class="hidden sm:block md:hidden font-bold">Teks ini muncul hanya pada ukuran tablet</h1> <h1 class="hidden md:block lg:hidden font-bold">Teks ini muncul hanya pada ukuran laptop</h1> <h1 class="hidden lg:block font-bold">Teks ini muncul hanya pada ukuran desktop</h1> </div> <div class="py-4 px-10 border rounded-md flex justify-evenly items-start gap-x-4 bg-gray-50 shadow-md"> <img src="<https://api.dicebear.com/7.x/adventurer-neutral/svg?seed=Cookie>" alt="avatar" class="w-10 rounded-full mb-3" /> <div class=""> <h1 class="font-bold">John Doe</h1> <p class="text-gray-500 font-mono">Front End Developer</p> </div> </div> </div> Mari kita analisis: Pada layar mobile elemen tersebut memiliki background berwarna merah dan text yang muncul yaitu ukuran mobile.Kemudian saat layar memiliki lebar minimal sebesar 640px maka background berganti berwarna purple dan text yang muncul yaitu ukuran tablet.Saat layar memiliki lebar minimal 768px maka background berganti berwarna orange dan text yang muncul yaitu ukuran laptop.Lalu demikian juga saat layar memiliki minimal lebar 1024px maka background berganti berwarna violet dan text yang muncul yaitu ukuran desktop. Kesimpulan Well, setelah mengetahui utility-utility apa saja yang akan sering digunakan ketika menggunakan Tailwind CSS, maka dapat kita ambil kesimpulan: Tailwind merupakan framework CSS yang menyediakan utility-utility yang berguna untuk memproses styling pada elemen HTML dengan mudah dan easy to customize.Untuk membuat sebuah wrapper dan membuatnya rata kanan kiri, kamu bisa menggunakan container sebagai pembungkusnya.Ingin melakukan proses layouting? Kamu bisa menggunakan utility flex atau grid untuk mencapai hal tersebut.Bingung dengan responsive design? Tenang Tailwind menyediakan responsive utility yang dapat kita gunakan untuk menyesuaikan posisi elemen HTML kita sesuai dengan lebar layar yang digunakan. Tentunya dengan mempelajari Tailwind CSS kamu akan mendapatkan flexibility dan kemudahan melakukan customization dalam proyek yang akan dibangun. Dan apabila kamu ingin mempelajari lebih lanjut Tailwind CSS, kamu bisa mengunjungi kelas gratis yang disediakan BuldWithAngga. Sekian artikel kali ini dan sampai jumpa dalam artikel selanjutnya.

Kelas Pengenalan Dasar Typescript di BuildWithAngga

Pengenalan Dasar Typescript

Typescript merupakan superset dari Javascript. Apa yang dilakukan oleh Javascript tentu bisa dilakukan Typescript, namun sebaliknya apa yang dilakukan Typescript belum tentu bisa dilakukan Javascript. Terdapat fitur-fitur dasar yang akan sering kita gunakan ketika menggunakan Typescript, pada artikel kali ini kita membahas dasar dan bagaimana menuliskan sintaks Typescript dan implementasi contoh sederhananya. 1. Tipe Data Seperti penjelasan di awal, Typescript merupakan superset dari Javascript yang dimana semua yang dilakukan oleh Javascript tentu saja bisa dilakukan Typescript. Berikut ini tipe data yang akan sering digunakan ketika menggunakan Typescript: Tipe DataContohstringIni bertipe data stringnumber1,2,3,4booleantrue/false 2. Variabel Terdapat fitur ekstra yang bisa kita tetapkan ketika ingin membuat sebuah variabel pada Typescript, yaitu kita bisa menetapkan tipe data apa yang akan ditampung pada variabel tersebut. Sebagai contoh: let username:string = 'John Doe' username = 30 console.log(username) // Output: Type 'number' is not assignable to type 'string'. Hal merupakan sebuah benefit ketika menggunakan Typescript, karena menjadikan program kita akan lebih konsisten dan meminimalisir terjadinya error akibat perubahan variabel yang tidak inginkan. 3. Type and Interface Type pada Typescript dapat kita manfaatkan untuk mendefinisikan tipe data yang akan digunakan. type UserType = { name: string age: number } const userObject:UserType = { name:'John Doe', age:10 } Pada kode di atas, UserType didefinisikan sebagai sebuah type yang memiliki dua property: name dengan tipe string dan age dengan tipe number. Kemudian, kita membuat object userObject dibuat berdasarkan tipe UserType yang telah didefinisikan sebelumnya. Lalu terdapat interface, yaitu aturan yang berbentuk object untuk mendefinisikan tipe data yang akan digunakan. Contoh penggunaan: interface UserInterface{ name: string age: number } const someUserObject:UserInterface = { name:'Doe', age:10 } Terlihat pada kedua contoh di atas, baik Type ataupun Interface sama-sama diwajibkan untuk mengisi property yang kita definisikan. Apabila kamu ingin membuat property tersebut bersifat opsional, maka kamu bisa mendapatkannya dengan cara menambahkan Opsional Mark (?) pada property tersebut. interface UserInterface{ name: string age: number address?:string // Property yang bersifat opsional, maka Typescript menghiraukan apabila tidak terdapat nilai ini. } const someUserObject:UserInterface = { name:'Doe', age:10 } 4. Intersection and Union Type Intersection (&) pada Typescript memungkinkan kita untuk menggabungkan beberapa tipe data menjadi satu. // Definisikan Type type UserType={ name:string username:string } type BioType= { age:number } // Gunakan Type pada object const user:BioType & UserType={ name:'John Doe', username:'johndoe', age:30 } Pertama, kita definisikan UserType dengan property name dan username sebagai string.Lalu, kita definisikan juga BioType dengan property age sebagai number.Kemudian kita melakukan penggabungan antara UserType dan BioType dengan intersection (&) untuk membuat tipe data baru pada variabel user, dan hal ini membuat objek user wajib memiliki semua property dari kedua tipe data tersebut. Berbeda dengan Intersection Type yang dimana kita harus mengisi semua nilai pada tipe data tersebut, Union Type (|) digunakan untuk menyatakan bahwa sebuah nilai dapat memiliki salah satu dari beberapa tipe data yang didefinisikan. // Definisikan Type type UserType={ name:string username:string } type BioType= { age:number } // Gunakan Type pada object const user:BioType | UserType={ name:'John Doe', username:'johndoe', } Kode di atas valid, dikarenakan kita menggunakan Union Type yang dimana pada variabel tersebut dapat memiliki salah hanya satu nilai saja yang dari kita definisikan. 5. Array and Object Pada Typescript, kita bisa mendefinisikan tipe data array menggunakan sintaks khusus. Ada beberapa cara untuk melakukannya: Notasi Type: Menggunakan tanda kurung siku [] untuk mendefinisikan tipe array dari suatu tipe data tertentu. // array string let fruits: string[] = ['Jeruk', 'Pisang', 'Pepaya']; // array number let age: number[] = [20, 14, 33, 36,]; Generic Type: Kita juga bisa menggunakan generic Array untuk mendefinisikan tipe array dengan lebih eksplisit. // array string let fruits: Array = ['Jeruk', 'Pisang', 'Pepaya']; // array number let age: Array = [20, 14, 33, 36,]; Union: Kita juga bisa menggunakan Union Type (|) untuk mendefinisikan tipe array yang dapat menyimpan beberapa tipe data. // array string atau number let data: (string | number)[] = ['Jeruk', 30, 'Pisang', 456]; Tuple: Tuple adalah tipe khusus array yang memungkinkan kita mendefinisikan tipe data untuk setiap elemen dalam array pada posisi yang telah ditentukan. // Tuple dengan tipe data spesifik untuk setiap elemen let tuple: [string, number, boolean] = ['Jeruk', 30, true]; Sedangkan untuk mendefinisikan objek pada Typescript, ada beberapa cara yang dapat kita gunakan, yaitu: Notasi Object: Kita bisa menggunakan notasi objek langsung dengan menetapkan tipe data untuk setiap property dalam objek. let bio: { name: string; age: number } = { name: 'John Doe', age: 30 }; Interface: Menggunakan interface memungkinkan kita mendefinisikan struktur objek yang lebih kompleks dengan menentukan tipe data untuk setiap property. interface PersonInterface { name: string; age: number; } let person: PersonInterface = { name: 'John Doe', age: 30 }; Type: Kita juga bisa menggunakan type untuk digunakan pada tipe data objek, dengan cara yang serupa seperti menggunakan interface. type TypePerson = { name: string; age: number; }; let person: TypePerson = { name: 'John Doe', age: 30 }; 6. Function Terdapat perbedaan dalam membuat function ketika menggunakan Javascript dan Typescript. Apabila kita membuat function dan terdapat parameter didalamnya, kita diwajibkan untuk mendefinisikan tipe data dari parameter tersebut. function somFunction(x: number, y: number) { // rest of code } Kemudian kita juga dapat memberikan informasi tambahkan pada tipe data dari kembalian fungsi tersebut, sebagai contoh: function sum(x: number, y: number):number { return x+y } Parameter: Fungsi sum memiliki dua parameter yang memiliki tipe data number.Tipe Kembalian: Dengan adanya :number setelah parameter fungsi, ini menandakan bahwa fungsi ini akan mengembalikan nilai bertipe number.Operasi: Fungsi ini menjumlahkan nilai x dan y, lalu mengembalikan hasil penjumlahan tersebut sebagai nilai kembalian. Kesimpulan Kesimpulannya dengan Typescript, kita dapat dengan jelas mendefinisikan struktur tipe data yang diharapkan, baik untuk objek, fungsi, atau jenis data lainnya. Penggunaan type, interface, dan konsep seperti union, intersection memungkinkan kita untuk membuat kode yang lebih aman dan mudah dipahami. Apabila ingin belajar lebih banyak mengenai Typescript, Di BuildWithAngga kita punya kelas gratis dan mudah dipahami untuk keperluan belajar kalian. So tunggu apalagi? Sampai jumpa dikelas dan good luck!

Kelas Pengenalan Dasar Javascript di BuildWithAngga

Pengenalan Dasar Javascript

Berdasarkan hasil survey Stack Overflow Developer Survey 2023, Javascript menempati posisi pertama dalam urutan “Most Popular Technology”. Javascript digunakan hampir 95% untuk semua website yang kita digunakan baik itu pada skala besar ataupun kecil. Terdapat banyak framework Javascript yang bisa digunakan secara gratis untuk mengembangkan aplikasi dan website sesuai kebutuhan. Namun kemampuan fundamental dasar Javascript sangat dibutuhkan apabila ingin menggunakan framework tersebut secara maksimal dan efisien. Maka dari itu sebelum mengenal dan menggunakan framework lebih jauh, alangkah baiknya kita memahami dasar-dasar fundamental nya terlebih dahulu. 1. Variabel Seperti matematika, variabel merupakan tempat menyimpan data. Javascript menyediakan tiga cara untuk membuat variabel, yakni: Menggunakan var Kata kunci ini bersifat Global Scope, dikarenakan variabel tersebut dapat di akses secara global dan diberikan nilai berulang kali. Perhatikan kode berikut: var age = 20 { var age = 40 } var age = 50 console.log(age) // Output: 50 Pada kode tersebut terdapat tiga variabel dengan nama yang sama yaitu age, dan diberikan nilai awal berupa 20 lalu di update menjadi 40 hingga terakhir menjadi 50. Baris kode tersebut merupakan kode yang valid dan tidak terdapat error. Namun ada kalanya kita membuat variabel dengan nama yang sama akan tetapi berada dalam ruang lingkup yang berbeda. Contohnya: var name = 'John' function sayMyName() { var name = 'Heisenberg' console.log(name) } console.log(name) // John sayMyName() // Fungsi dijalankan dan memiliki output: Heisenberg console.log(name) // Value dari variabel pertama berubah menjadi: Heisenberg Pada kode di atas, kita mendefinisikan variabel name yang memiliki value ‘John’. Kemudian pada baris berikutnya terdapat fungsi sayMyName yang memiliki nama variabel yang sama namun dengan value ‘Heisenberg’.Apabila kita console variabel pertama, akan didapatkan output berupa ‘John’.Namun ketika fungsi sayMyName dijalankan, kemudian kita console variabel name yang pertama, maka nilai yang semula ‘John’ berubah menjadi ‘Heisenberg’. Hal ini tentu tidak kita inginkan, karena dapat mengakibatkan sistem yang dibangun menjadi tidak konsisten karena nilai variabel yang berubah-ubah. Untuk mengatasi hal tersebut Javascript menyediakan dua kata kunci lainnya yaitu let dan const. Menggunakan let Ketika menggunakan kata kunci let, maka kita mendapatkan variabel yang bersifat Local Scope dan dapat diubah nilainya namun tidak dapat dideklarasikan ulang. Perhatikan kode berikut: let age = 30 age = 50 // Melakukan perubahan nilai { age = 30 // Tetap bernilai 30 } console.log(age) // Output: 50 Kode tersebut berjalan tanpa adanya error, namun berbeda jika kita mendeklarasikan ulang variabel tersebut: let age = 30 let age = 40 console.log(age) // SyntaxError:Identifier 'age' has already been declared Terjadi error dikarenakan kata kunci let tidak mengizinkan kita untuk mendeklarasikan ulang variabel dengan nama yang sama. Menggunakan const Sama seperti let, kata kunci const menghasilkan variabel yang memiliki sifat Local Scope namun tidak dapat diubah nilainya dan tidak bisa dideklarasikan ulang. Hal ini sesuai dengan namanya yaitu Constanta. Ketika menggunakan kata kunci const, variabel yang dihasilkan akan menjadi lebih strict dan membuatnya konsisten. Berikut ini contoh penerapannya: // 1. Kita mendeklarasikan ulang variabel dan melakukan update terhadap valuenya const data = 'John' const data = 'Doe' console.log(data) // SyntaxError: Identifier 'data' has already been declared // 2. Kita melakukan update data terhadap variabel const const data = 'John' data = 'Doe' console.log(data) // TypeError: Assignment to constant variable. Berdasarkan point di atas, apabila ingin membuat variabel direkomendasikan menggunakan kata kunci let ataupun const. Hal ini bertujuan untuk meminimalisir terjadinya duplikasi dan perubahan nilai pada variabel yang tidak kita inginkan. Lalu bagaimana jika kita ingin membuat variabel yang dapat menyimpan banyak nilai dan tipe data secara bersamaan? Untuk menjawab hal tersebut, maka kita akan berkenalan dengan Array. 2. Array Array merupakan struktur data pada Javascript yang bertujuan untuk menyimpan beberapa nilai dan tipe data dalam satu variabel. Contohnya: const fruits = ['apel', 'pisang', 'jeruk'] Pada kode di atas kita membuat variabel yang memiliki tipe data array dan menampung value berupa apel, pisang, dan jeruk. Lalu bagaimana cara kita mengakses value dari array tersebut? Untuk mengakses value yang berada di dalam array, kita bisa memanfaatkan indeks array. Indeks atau Index dalam array akan selalu dimulai dari 0, maka apabila ingin mengakses value dalam array tersebut, kita bisa melakukannya seperti ini: const fruits = ['apel', 'pisang', 'jeruk'] console.log(fruits[0]) // Output: apel console.log(fruits[1]) // Output: pisang console.log(fruits[2]) // Output: jeruk Array juga dapat menyimpan beberapa tipe data kompleks sekaligus seperti yang diterangkan di awal. const someArray = ['String', true, 3, { name: "John", age: 30, address: "123 Main St", sayHello: function () { console.log("Hello, my name is " + this.name); }, isLogin: true }, [1, 2, 3, 4, 5], function () { console.log("Hello World"); }] 3. Method Array Pada langkah sebelumnya, didapatkan data array sebagai berikut: const fruits = ['apel', 'pisang', 'jeruk'] Dan apabila kita ingin mengakses value yang berada di dalam array tersebut, kita bisa menggunakan indeks. Maka didapatkan: console.log(fruits[0]) // apel console.log(fruits[1]) // pisang console.log(fruits[2]) // jeruk Lalu terdapat pertanyaan, bagaimana jika pada array tersebut terdapat ribuan data yang kita tidak tahu persis indeks nya? Tentu hal ini sangat tidak efisien jika kita console satu persatu untuk mengecek nilainya. Untuk menjawab masalah tersebut, Javascript menyediakan fungsi khusus yang berkaitan dengan array, salah satunya ialah fungsi map. fruits.map((result) => { console.log(result) }) Pertama kita panggil nama array yang kita miliki, yaitu array bernama fruits.Kemudian kita melakukan proses chaining method dengan memanggil fungsi map.Fungsi map bertujuan untuk membuat array baru dan hasil dari fungsi tersebut akan ditampung kedalam variabel yang kita beri nama result.Kemudian pada langkah terakhir kita cetak nilai dari variabel result tersebut. Maka kita telah berhasil mencetak nilai secara keseluruhan dari dalam array tanpa harus melakukannya satu persatu dengan indeks. Selain menggunakan kata kunci map, Javascript menyediakan beberapa fungsi lainnya, seperti: forEach()length()pop()push()shift() Untuk lebih jelasnya silakan kamu cek dokumentasinya di sini: Array - Javascript MDN. 4. Object Object merupakan struktur data pada Javascript yang memiliki property dan value untuk menyimpan beberapa tipe data sekaligus. Perbedaan antara array dan object ialah, array diawali dengan kurung siku [] sedangkan untuk object diawali dengan kurung kurawal {}. const user = { property:"value", name: "John", age: 30, address: "123 Main St", isLogin: true } Terlihat kita membuat sebuah object yang berisikan property dan value yang memiliki tipe data berbeda-beda. Lantas bagaimana cara kita mengakses value dari object tersebut? Berikut implementasinya: console.log(user.property) // Output: "value" console.log(user.name) // Output: "John" console.log(user.age) // Output: 30 console.log(user.address) // Output: "123 Main St" console.log(user.isLogin) // Output: true Kalau diperhatikan pada kode tersebut, kita memanggil nama object berulang kali setiap ingin mencetak nilainya. Kemudian muncul pertanyaan lainnya yaitu, apakah kita bisa memanggil nama property nya saja tanpa perlu melakukan chaining dengan nama object tersebut? Jawabannya adalah bisa dan kita akan memanfaatkan salah satu fitur magic Javascript yaitu Destructuring Object. const { property, name, age, address, isLogin } = user // Mereferensikan dengan nama object terkait console.log(property) // Output: "value" console.log(name) // Output: "John" console.log(age) // Output: 30 console.log(address) // Output: "123 Main St" console.log(isLogin) // Output: true Terlihat pada kode di atas kita melakukan proses Destructuring Object dengan cara mengeluarkan property dari object tersebut, kemudian menampungnya ke dalam sebuah variabel yang sesuai dengan nama property nya. Hal tersebut valid dan kita bisa membuktikannya dengan membuka browser console, maka didapatkan hasil yang sama seperti di awal namun dengan kode yang lebih clean dan mudah dibaca. 5. Perulangan Perulangan pada Javascript merupakan salah satu basic yang wajib kamu kuasai, kenapa demikian? Perhatikan kode berikut: console.log(1) console.log(2) console.log(3) console.log(4) console.log(5) Terlihat kita ingin mencetak nilai console secara berulang sebanyak 5 kali. Namun bagaimana jika ingin mencetak nilai console tersebut hingga sampai 100 atau bahkan 1000 percobaan? Tentu apabila menuliskannya satu persatu maka akan menghabiskan waktu dan sangat tidak efisien. Untuk mengatasi hal tersebut, kita akan memanfaatkan fitur perulangan pada Javascript yaitu menggunakan kata kunci for. for (let index = 0; index <= 100; index++) { console.log(index) } Kita melakukan perulangan dengan kata kunci for.Pada fungsi for tersebut menerima tiga parameter yakni:Parameter pertama: Merupakan inisialisasi variabel dan parameter ini akan selalu berjalan satu kali sebelum perulangan di mulai. Pada kode di atas kita mendefinisikan sebuah variabel dengan nama index dan bernilai 0.Parameter kedua: Merupakan kondisi mengapa perulangan tersebut terjadi. Pada parameter kedua, kita definisikan kondisi yaitu variabel pada parameter pertama tidak boleh lebih atau sama dengan 100.Parameter ketiga: Merupakan sebuah kondisi yang di mana akan selalu di-eksekusi setiap kali perulangan tersebut dijalankan. Pada parameter ketiga, kita melakukan modifikasi variabel index dengan melakukan proses increment variabel dengan operator ++, yang dimana berfungsi untuk menambahkan satu nilai setiap perulangan. Maka outputnya adalah nilai dari variabel tersebut akan terus bertambah sesuai dengan kondisi yang kita atur pada parameter kedua.Apabila kita console ke dalam browser maka didapatkan nilai yang sesuai dengan kondisi pada parameter kedua fungsi tersebut. Selain kata kunci for, Javascript menyediakan juga beberapa kata kunci lainnya yaitu: WhileDo WhileFor InFor Of Untuk lebih jelasnya silakan kamu cek dokumentasinya di sini: Loop and Iteration - Javascript MDN. 6. Percabangan Percabangan atau pengecekan kondisi adalah cara agar program yang kita bangun berjalan sesuai dengan kondisi yang diinginkan. Javascript menyediakan beberapa kata kunci untuk melakukan percabangan yang salah satunya adalah if else statement. if (condition) { // Blok kode ketika kondisi bernilai true } else { // Blok kode ketika kondisi bernilai false } Pada point sebelumnya kita berhasil membuat perulangan sebanyak 100 kali. Namun perbedaannya kali ini kita akan melakukan kondisi yang dimana jika variabel index tersebut merupakan angka genap, maka tampilkan console ‘Angka tersebut Genap’. Namun jika kondisi pertama tidak terpenuhi maka tampilkan console ‘Angka tersebut Ganjil’. for (let index = 0; index <= 100; index++) { if (index % 2 == 0) { console.log(`Angka ${index} adalah Genap`) } else { console.log(`Angka ${index} adalah Ganjil`) } } Dari kode di atas kita mengkombinasikan tiga point yaitu: Melakukan perulangan sebanyak 100 percobaan.Lalu melakukan percabangan dimana, jika hasil sisa bagi variabel index dengan 2 adalah 0, maka kita cetak isi dari variabel tersebut dengan pesan angka tersebut genap.Namun jika hasil pada kondisi pertama tidak memenuhi syarat, bisa dipastikan angka tersebut merupakan bilangan ganjil. Pada langkah di atas, kita telah berhasil melakukan percabangan sederhana menggunakan Javascript. Tentu banyak contoh lainnya yang biasa kita temui, seperti ketika ingin mengakses halaman tertentu, namun belum melakukan proses login, maka kita akan diarahkan ke halaman login terlebih dahulu. Berikut ini beberapa kata kunci yang sering digunakan untuk melakukan percabangan atau pengecekan kondisi: if elseswitch caseternary operator Untuk lebih jelasnya silakan kamu cek dokumentasinya: Conditional Javascript - MDN 6. Function Function pada Javascript adalah kumpulan dari baris kode yang berfungsi untuk menyelesaikan task tertentu. Pada point-point sebelumnya kita sudah menggunakan fungsi seperti melakukan perulangan kata kunci for atau melakukan percabangan dengan kata kunci if. Namun bagaimana jika kita ingin membuat fungsi kita sendiri? Javascript menjawab pertanyaan tersebut dengan cara: Menggunakan function function sum(a, b) { return a + b } console.log(sum(1, 2)) // Output: 3 Menggunakan Arrow Function const sum = (a, b) => { return a + b; } console.log(sum(1, 2)); // Output: 3 Terlihat kita berhasil membuat fungsi dengan dua cara yang berbeda dan keduanya merupakan kode yang valid. Namun terdapat perbedaan diantara keduanya. Perhatikan kode berikut: const total = sum(10, 30) // Memanggil fungsi sebelum dideklarasikan console.log(total) // Output: 40 // Mendeklarasikan fungsi dengan kata kunci function function sum(a, b) { return a + b } Pada kode di atas kita membuat variabel yang menampung data dari hasil fungsi sum, kemudian kita melakukan console dan didapatkan kode tersebut valid. Kok bisa? Karena ketika membuat fungsi dengan kata kunci function, Javascript memberikan sifat Global Scope yang dimana kita bisa mengakses fungsi tersebut sebelum dideklarasikan. Berbeda ketika kita menggunakan arrow function, maka akan terjadi error karena arrow function tidak memiliki sifat Global Scope. const total = sum(10, 30) console.log(total) // Output: ReferenceError: Cannot access 'sum' before initialization const sum = (a, b) => { return a + b; } Namun pada akhirnya, kita tetap akan direkomendasikan untuk menuliskan fungsinya terlebih dahulu baru mengakses nya, hal ini bertujuan agar kode yang kita buat tetap konsisten untuk menghindari terjadinya error di kemudian hari. 7. Operator Berikut ini beberapa operator yang akan sering kamu temui ketika menggunakan Javascript: JavaScript Arithmetic Operators OperatorNamaContohHasil-Subtractionx= 5x = 5+Additionx = 5 + 1x = 6*Multiplicationx = 6 * 2x = 12++Incrementx++x = 13--Decrementx—x= 12%Modulus (Sisa bagi)x = 10 % 2 == 0true JavaScript Arithmetic Operators OperatorNamaContohHasil==Equal tox == 8false===Equal value and typex === "5"false!=Not equalx != 8true!==Not equal value or typex !== "5"true>Greater thanx > 8false<Less thanx < 8true>=Greater or equal tox >= 8false<=Less or equal tox <= 8true JavaScript Arithmetic Operators OperatorNamaContoh&&AND(x < 10 && y > 1) is true||OR(x === 5 || y === 5) is false!NOT!(x === y) is true Kesimpulan Dari artikel “Pengenalan Dasar Javascript” dapat kita simpulkan beberapa point berikut: Apabila ingin membuat variabel, direkomendasikan menggunakan kata kunci const atau let untuk menghindari terjadinya duplikasi dan perubahan nilai secara tidak disengaja.Array dan object sama-sama menyimpan berbagai tipe data secara bersamaan, namun memiliki sifat yang berbeda.Kita bisa memanfaatkan fungsi array apabila ingin melakukan sebuah manipulasi data yang berkaitan di dalamnya.Kata kunci if else merupakan salah satu cara agar kita bisa melakukan pengkondisian dengan syarat yang kita hendaki.Apabila melakukan sebuah task, dan baris kode tersebut berulang dan kompleks, kita bisa memecah task tersebut menjadi bagian yang lebih kecil dan mempunyai fungsi tersendiri. Untuk membuat fungsi tersebut, kita bisa dengan menggunakan kata kunci function ataupun menggunakan arrow function. Ok that’s it. Saya harap kamu belajar banyak dalam tulisan kali ini, dan apabila kamu ingin belajar tentang web development, kamu bisa bergabung dalam kelas gratis yang disediakan oleh BuildWithAngga. Dengan mengikuti kelas yang ada di BuildWithAngga kamu juga dapat menambah portfolio dan menambah ilmu untuk memulai karir sebagai Web Developer. Jadi tunggu apalagi? Mari bergabung dan sampai jumpa di kelas.

Kelas Tutorial Melakukan Fetching Data Menggunakan JavaScript di BuildWithAngga

Tutorial Melakukan Fetching Data Menggunakan JavaScript

Fetching data merupakan teknik bagaimana sebuah aplikasi melakukan permintaan resource pada server tertentu dan mengembalikan data tersebut sesuai dengan permintaan. Pada artikel kali ini kita akan membahas bagaimana melakukan Fetching data menggunakan Javascript menggunakan kata kunci fetch. Syntax fetch('url') .then(result => { // handle result here }).catch(error => { // handle error here }) Mari kita analisis: Fungsi fetch pada JavaScript menerima satu parameter bertipe data string, yaitu endpoint atau URL dimana kita akan melakukan proses permintaan data pada resource tertentu.Kemudian karena fungsi fetch merupakan sebuah Promise, maka kita perlu melakukan proses chaining dengan fungsi then agar mendapatkan data yang diinginkan.Ketika melakukan sebuah permintaan data menggunakan fetch, terkadang data yang diinginkan tidak dikembalikan sesuai permintaan. Hal tersebut terjadi karena server ataupun endpoint tersebut mengalami error yang tidak kita ketahui. Untuk mengatasi hal tersebut kita wajib melakukan error handling, yaitu dengan cara memanggil fungsi catch. Fungsi catch ini mendapatkan semua error baik saat melakukan proses pemanggilan data ataupun kesalahan saat proses development. Implementasi Kita akan mencoba untuk hit endpoint yang disediakan oleh website JSONPlaceholder untuk melakukan proses fetching sederhana menggunakan kata kunci fetch. Jadi mari kita mulai. Inisialisasi Project Silakan kamu buat folder dengan nama learn-fetching-data, kemudian buat file HTML dengan nama index.html dan script.js hal ini bertujuan agar kita memisahkan antara bagian logic dan proses render menjadi file terpisah. Dalam project kali ini kita akan menggunakan Tailwind CSS sebagai proses styling, maka didapatkan: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Sample API Data</title> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet" /> <style> body { font-family: "Poppins", sans-serif; } </style> <script src="https://cdn.tailwindcss.com"></script> </head> <body> <div class="container mx-auto px-5 mt-10"> <h1 class="text-2xl font-bold mb-5">Belajar Fetching Data</h1> <div id="container" class="flex flex-col gap-5"> <!-- Semua data akan dirender disini --> </div> </div> <script src="script.js"></script> </body> </html> Maka didapatkan hasil: 2. Lakukan Fetching Data Silakan kamu buka file script.js, kemudian kita akan melakukan proses fetching data dengan URL yang sudah kita siapkan sebelumnya, maka didapatkan: const fetchAllTodos = () => { return fetch("https://jsonplaceholder.typicode.com/posts") .then((response) => { if (!response.ok) { throw new Error('Network response was not ok.'); } return response.json(); }) .then((data) => { console.log(data); return data; }) .catch((error) => { return error; }); }; fetchAllTodos(); Maka apabila kita buka browser dan pada bagian console akan didapatkan data sebagai berikut: Seperti keterangan console di atas, kita sudah berhasil melakukan proses pengambilan data dengan menggunakan kata kunci fetch pada JavaScript. Selanjutnya kita akan menampilkan data tersebut ke dalam bentuk komponen UI yang sederhana. 3. Implementasikan Kedalam UI Untuk membuat hasil fetching data menjadi sebuah komponen HTML dan mudah dibaca, kita perlu membuat design nya terlebih dahulu. Berikut komponen Card yang akan kita gunakan untuk menampilkan data tersebut: <div class="border rounded-md p-4 flex justify-between items-start gap-x-3"> <div> <h1 class="font-bold mb-3">Lorem ipsum dolor sit amet.</h1> <span class="text-sm text-gray-500">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eum, suscipit?</span> </div> <div> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" /> </svg> </div> </div> Maka apabila kita padukan dengan baris HTML pada langkah pertama, didapatkan kode sebagai berikut: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Sample API Data</title> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet" /> <style> body { font-family: "Poppins", sans-serif; } </style> <script src="https://cdn.tailwindcss.com"></script> </head> <body> <div class="container mx-auto px-5 mt-10"> <h1 class="text-2xl font-bold mb-5">Belajar Fetching Data</h1> <div id="container" class="flex flex-col gap-5"> <!-- Semua data akan dirender disini --> <div class="border rounded-md p-4 flex justify-between items-start gap-x-3"> <div> <h1 class="font-bold mb-3">Lorem ipsum dolor sit amet.</h1> <span class="text-sm text-gray-500">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Eum, suscipit?</span> </div> <div> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" /> </svg> </div> </div> </div> </div> <script src="script.js"></script> </body> </html> Pada langkah ini kita sudah berhasil membuat design komponen Card, hanya saja data tersebut belum sesuai dengan hasil fetching kita. Maka kita perlu menjadikannya dinamis dengan cara membuat fungsi yang me-render komponen Card yang barusan kita dibuat. Silahkan kamu buka file script.js dan tambahkan kode berikut: // Ambil tag id container const containerDisplay = document.getElementById('container') // Komponen Card untuk render semua data const cardComponent = (title, body) => { // Buat Card const data = ` <div class="border rounded-md p-4 flex justify-between items-start gap-x-3"> <div> <h1 class="font-bold mb-3">${title}</h1> <span class="text-sm text-gray-500">${body}</span> </div> <div> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" /> </svg> </div> </div> ` // Tambahkan kedalam elemen container yang sudah kita definisikan sebelumnya containerDisplay.insertAdjacentHTML('afterbegin', data) } Kemudian kita buat sebuah fungsi bernama render untuk menggabungkan antara fungsi fetchAllTodos yang sudah kita definisikan sebelumnya dengan fungsi cardComponent yang barusan kita buat. function render() { fetchAllTodos() .then((response) => { response.forEach(result => { cardComponent(result.title, result.body); }); }) .catch((error) => { console.error('Error rendering data:', error); }); } render(); Maka apabila kita buka browser akan didapatkan hasil seperti ini: Taraa! Selamat kalian telah berhasil melakukan fetching data dan menampilkannya ke dalam komponen HTML yang mudah dibaca. Pada langkah selanjutnya kita akan mencoba melakukan Handle Error untuk mengantisipasi terjadinya kesalahan baik itu dari aplikasi kita maupun dari sisi server. 4. Handle Error Pertama kita buat komponen HTML nya terlebih dahulu dan kita sebut sebagai komponen Alert: <div class="m-10 border border-red-700 text-red-700 bg-red-100 p-10 rounded-lg flex flex-col items-center gap-3"> <div class="flex gap-x-3"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" /> </svg> <h1 class="font-bold text-center md:text-xl lg:text-2xl">Terjadi Kesalahan</h1> </div> <span class="text-sm text-center text-red-600"><span class="font-bold">Error Message :</span> Some Error</span> </div> Didapatkan bentuk seperti ini: Lalu buat fungsi untuk menampung komponen Alert tersebut seperti komponen Card sebelumnya, didapatkan: // Komponen Alert jika terdapat error const alertComponent = (message) => { const data = ` <div class="m-10 border border-red-700 text-red-700 bg-red-100 p-10 rounded-lg flex flex-col items-center gap-3"> <div class="flex gap-x-3"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" /> </svg> <h1 class="font-bold text-center md:text-xl lg:text-2xl">Terjadi Kesalahan</h1> </div> <span class="text-sm text-center text-red-600"><span class="font-bold">Error Message :</span> ${message}</span> </div> ` containerDisplay.insertAdjacentHTML('afterbegin', data) } Kemudian kita implementasikan ke dalam fungsi render sebelumnya, didapatkan: function render() { fetchAllTodos() .then((response) => { response.forEach(result => { cardComponent(result.title, result.body); }); }) .catch((error) => { alertComponent(error.message) }); } render(); Maka dengan ini apabila terdapat error, maka fungsi AlertComponent akan berjalan dan menampilkannya sebagai komponen HTML sesuai dengan yang kita harapkan. Berikut ini kode keseluruhan file index.html dan script.js yang telah kita buat: File index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Sample API Data</title> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet" /> <style> body { font-family: "Poppins", sans-serif; } </style> <script src="https://cdn.tailwindcss.com"></script> </head> <body> <div class="container mx-auto px-5 mt-10"> <h1 class="text-2xl font-bold mb-5">Belajar Fetching Data</h1> <div id="container" class="flex flex-col gap-5"></div> </div> <script src="script.js"></script> </body> </html> File script.js // Ambil tag id container const containerDisplay = document.getElementById('container') // Komponen Card untuk render semua data const cardComponent = (title, body) => { // Buat Card const data = ` <div class="border rounded-md p-4 flex justify-between items-start gap-x-3"> <div> <h1 class="font-bold mb-3">${title}</h1> <span class="text-sm text-gray-500">${body}</span> </div> <div> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" /> </svg> </div> </div> ` // Tambahkan kedalam elemen container yang sudah kita definisikan sebelumnya containerDisplay.insertAdjacentHTML('afterbegin', data) } // Komponen Alert jika terdapat error const alertComponent = (message) => { const data = ` <div class="m-10 border border-red-700 text-red-700 bg-red-100 p-10 rounded-lg flex flex-col items-center gap-3"> <div class="flex gap-x-3"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" /> </svg> <h1 class="font-bold text-center md:text-xl lg:text-2xl">Terjadi Kesalahan</h1> </div> <span class="text-sm text-center text-red-600"><span class="font-bold">Error Message :</span> ${message}</span> </div> ` containerDisplay.insertAdjacentHTML('afterbegin', data) } // Fungsi untuk mendapatkan semua data fetch const fetchAllTodos = () => { return fetch("https://jsonplaceholder.typicode.com/posts") .then((response) => { if (!response.ok) { throw new Error('Network response was not ok.'); } return response.json(); }) .catch((error) => { return error; }); }; function render() { fetchAllTodos() .then((response) => { response.forEach(result => { cardComponent(result.title, result.body); }); }) .catch((error) => { alertComponent(error.message) }); } render(); Kesimpulan Tentu saja artikel ini hanya mencakup dasar fetching data dan bagaimana implementasinya dalam project sederhana. Kita juga dapat mengkombinasikan fetching data menggunakan framework JavaScript seperti React atau Vue untuk membangun sebuah website yang lebih interaktif dan efisien. Kalian bisa mulai latihan menggunakan framework JavaScript dengan cara mempelajari beberapa kelas online di BuildWithAngga. Jadi tunggu apa lagi? Mari bergabung dan sampai jumpa di kelas!

Kelas Mengenal Framework Tailwind CSS Serta Fitur Unggulannya di BuildWithAngga

Mengenal Framework Tailwind CSS Serta Fitur Unggulannya

Cascade Style Sheet (CSS) sangat penting digunakan apabila kita ingin membuat projek website menjadi lebih menarik dalam meningkatkan user interface dan user experience sehingga pengguna yang menggunakan website tersebut menjadi lebih betah dan dapat meningkatkan keuntungan dari perusahaan tersebut. Pada CSS terdapat banyak property yang bisa digunakan seperti tinggi, lebar, warna latar belakang, efek shadows, warna gradient, border, rata kanan dan kiri, dan juga sebagainya. Apabila kita menulis property tersebut satu per satu dari awal maka akan membutuhkan waktu yang begitu banyak dalam menyelesaikan sebuah tampilan projek website. Mengenal Framework Tailwind CSS Saat ini terdapat banyak framework CSS yang dapat kita gunakan untuk mempercepat kinerja kita sebagai website developer dalam mengembangkan website yang modern disertai tampilan menarik, saya akan coba memberikan rekomendasi untuk kamu segera mencoba framework CSS yang sedang popular saat ini yaitu adalah Tailwind CSS. Tailwind adalah sebuah framework CSS yang mengedepankan konsep utility-first, yang dimaksud dari utility-first adalah Tailwind telah menyediakan ratusan Class CSS yang dapat kita panggil dengan mudah pada dokumen HTML, sehingga kita tidak perlu lagi melakukan penulisan CSS secara custom karena class CSS yang disediakan oleh tailwind sudah sangat lengkap. Beberapa Class pada framework Tailwind CSS yang sering digunakan oleh website developer adalah sebagai berikut: w-10 = mengatur lebarh-10 = mengatur tinggitext-white = mengatur warna teksbg-indigo-500 = mengatur warna latar belakangflex flex-col = mengatur layout menjadi verticalgrid grid-cols-3 = mengatur layout menjadi terbagi 3 bagian (DIV) Perbedaan Tailwind CSS dengan traditional framework CSS lainnya Jika sebelumnya kamu pernah pakai Bootstrap atau Semantic UI maka ketika mulai menggunakan Tailwind CSS, kamu akan melihat perbedaan yang besar yaitu pada Tailwind CSS tidak tersedia predefined components yang siap digunakan seperti btn-primary, navbar, form-group, dan juga sebagainya layaknya tersedia pada traditional framework CSS. Konsep utility-first pada tailwind css memberikan kebebasan tak terbatas kepada website developer untuk menggunakan kreatifitas mereka dalam mengembangkan sebuah website yang modern disertai tampilan sangat menarik. Selain itu juga untuk mengurangi bloated pada projek tersebut sehingga perfomance pada website menjadi lebih cepat karena tidak menggunakan Class yang tidak terpakai. Tips mempelajari framework Tailwind CSS dengan baik Kamu perlu memperdalam property utama yang tersedia pada CSS sebelum langsung menggunakan Tailwind CSS dikarenakan seperti yang saya bilang sebelumnya kalau menggunakan Tailwind tidak akan tersedia predefined component sehingga kita perlu paham untuk mengatur tinggi, lebar, warna background, dan sebagainya menggunakan property apa saja sehingga hasilnya lebih maksimal. Setelah mengenal seluruh property penting pada CSS maka bisa dilanjutkan untuk memahami dokumen resmi framework Tailwind CSS untuk mempelajari bagaimana cara install, pemakaian class, dan juga sebagainya sehingga kita bisa lebih hafal dalam menggabungkan setiap utility yang telah disediakan oleh framework Tailwind CSS untuk membuat layout yang kompleks. Perbanyak slicing tampilan website untuk berlatih Saya biasanya memperdalam keahlian dalam menggunakan Tailwind CSS adalah dengan cara melakukan slicing berbagai layout dari mulai yang mudah sampai dengan sulit. Beberapa template Figma tersebut dapat saya download gratis sebagai bahan latihan pada website Shaynakit, seluruh design pada Shaynakit dibuat oleh designer lokal dalam membantu website developer memiliki projek yang menarik sebagai portfolio mereka kedepannya nanti. Kesimpulan menggunakan framework Tailwind CSS Tailwind CSS memberikan kebebasan dan perfomance yang baik dalam membangun website yang memiliki tampilan modern dan eye-catching. Kita dapat mengkombinasikan Tailwind CSS dengan framework JavaScript seperti React atau Vue JS dalam membangun website yang interaktif demi meningkatkan pertumbuhan bisnis perusahaan. Kamu bisa mulai latihan menggunakan framework tailwind css dengan cara mempelajari beberapa kelas online gratis tailwind css buatan mentor expert di BuildWithAngga.

Kelas Cara Membuat Button Primary Menarik - Tutorial Tailwind CSS di BuildWithAngga

Cara Membuat Button Primary Menarik - Tutorial Tailwind CSS

Pada kali ini kita akan belajar membuat button yang menarik menggunakan HTML dan Tailwind CSS untuk membangun projek website yang modern. Pertama kita perlu membuat tag HTML sederhana terlebih dahulu untuk hyperlink yang akan kita jadikan sebuah button <a href="#" class=""> View Profile </a> Kodingan HTML di atas tersedia class untuk komponen tersebut dan belum kita berikan styling menggunakan Tailwind CSS, kita akan memberikan property seperti: panjanglebarwarna backgroundtingkat radius cornerefek hover ketika disorot cursor <a href="#" class="font-bold text-white bg-orange-400 rounded-full px-5 py-3"> View Profile </a> Saya akan menjelaskan fungsi setiap class name yang digunakan di atas sebagai berikut: font-bold digunakan untuk menjadikan text pada button tersebut menjadi lebih tebal sehingga mudah dilihat penggunatext-white untuk menjadikan warna text menjadi warna putih karena kita menggunakan warna background orange sehingga lebih mudah dibacabg-orange-400 artinya adalah kita mengatur tersebut memiliki background berwarna orange dengan angka 400 sehingga warnanya di antara terang dan gelaprounded-full kita butuhkan untuk mengatur button tersebut berbentuk halus pada setiap sudutnya Pada button tersebut kita tidak mengatur lebar dan tinggi secara manual dengan angka yang pasti, namun kita menggunakan padding untuk mengatur lebar dan tinggi dari button tersebut. Mengapa demikian? agar lebarnya menjadi lebih responsive sesuai dengan panjang dari text pada button tersebut. Maka berikut hasil dari pembuatan button sejauh ini: Selanjutnya kita perlu menambahkan sedikit interaksi agar meningkatkan user experience ketika pengguna menyorot button tersebut maka akan berubah warna sehingga berbeda dengan komponen lainnya menggunakan kode berikut: <a href="#" class="hover:bg-indigo-950 font-bold text-white bg-orange-400 rounded-full px-5 py-3"> View Profile </a> Jika kita lihat di atas maka saya baru saja menambahkan hover:bg-indigo-950 yang berarti ketika di-hover atau sorot maka warnanya berubah menjadi indigo, kamu bisa cobain save projeknya lalu lihat hasilnya pada browser favoritmu. Selanjutnya kita belajar Tailwind CSS tentang apa lagi ya? saranin langsung ke BuildWithAngga ya melalui Instagram.