Daftar Isi
Daftar Isi
Hari Pertama
Pengantar
Persyaratan
Persiapan
Instal NodeJS
Instal VS Code
Instal Google Chrome
Menggunakan Chrome Console
Kode Pada Chrome Console
Mengenal Javascript
Tipe Data
Number
String
Boolean
Undefined
30 Hari Javascript 1
Null
Memeriksa Tipe Data
Komentar
Variable
Hari ke Dua
Tipe Data non-Primitif
Number
Math
String
Method .length
Method .toUpperCase()
Method .toLowerCase()
Method .substr()
Method .split()
Method .trim()
Method .repeat()
Hari ke Tiga
Boolean
Operator
Assigment Operator
Operator Aritmatika
Operator Pembanding
Operator Logika
Operator Kenaikan dan Penurunan
Operator Ternary
Hari ke Empat
Percabangan
IF
IF-ELSE
IF-ELSE IF
Switch
Ternary
Hari ke Lima
Array
Ubah nilai Array
Method .concat()
Method .length
Method .indexOf()
Method .join()
30 Hari Javascript 2
Method .push()
Method .pop()
Method .unshift()
Method .shift()
Method .sort()
Method .slice()
Array Multi-dimensi
Hari ke Enam
Perulangan
For Loop
While loop
For Of
Object Literal
Cara akses objek literal
Mengubah nilai
Hari ke Tujuh
Latihan
Function
Cara Memanggil function
Void Function
Return Function
Function dengan parameter
Parameter dengan nilai default
CallBack
Hari ke Delapan
Module
Menyiapkan Proyek
Install Express Js
Membuat Web Server
Menjalankan Web Server
Hari ke Sembilan
Install Insomnia REST
Mengenal HTTP Method
Request
Response
Hari ke Sepuluh
Router
Controller
Hari ke Sebelas
30 Hari Javascript 3
Model dan Sequelize
Install Sequelize Cli
Install Sequelize
Initisalize Sequelize
Koneksi Database
Membuat Model
Migrate Model
Hari ke Dua Belas
Create
Read
Update
Delete
Hari ke Tiga Belas
Authentication
Tambah Kolom Sequelize
Register User
Token User
Authorize
Hari ke Empat Bela
Latihan
Deploy Server
Mysql Online
Heroku
Hari ke Lima Belas
Pengenalan ES6
var , const dan let
Arrow Function
Helper ES6
Module
Dasar-dasar DOM
Selector DOM
Berdasarkan ID
Berdasarkan Class
Berdasarkan Tag
Membuat element dan menambah attribute
Mengedit Element
Menghapus Element
Membuat element dan menambah attribute
Pada elemennya sendiri
30 Hari Javascript 4
Beri event pada selector
AddEventListener
Hari ke Enam Belas
React Js
Install React Js
WTF JSX
Component
Component class
Component function (dibahas pada materi Hooks)
Props
Mengakses Props
State
Mengubah Nilai State
Mengakses State
Hari ke Tujuh Belas
React Router DOM
Uji Router
Hari ke Delapan Belas
Persiapan React Redux
Reducer
Action
Store
Provider
Hari ke Sembilan Belas
React Hooks
useState
useRef
useEffect / lifeCycle Hooks
Konsum Redux
Hari ke Duapuluh
Input pada React
Action simpan ke database
Hari ke Duapuluh Satu
Latihan
Persiapan Deploy
Deploy
Hari ke Duapuluh Dua
Persiapan Masuk React Native
Node Js
30 Hari Javascript 5
Java Development Kit
Android Studio
Install React Native
Menjalankan React Native
Hari ke Duapuluh Tiga
React Native Dasar
Hello World!
Style
Layout
Text Input
Button
ScrollView
Hari ke Duapuluh Empat
Penggunaan UI
Menggunakan nativebase
React Router Native
Hari ke Duapuluh Lima
Icon
Redux
Hari ke Duapuluh Enam
Login
Logout
Hari ke Duapuluh Tujuh
Register
Hari ke Duapuluh Delapan
Latihan
Hari ke Duapuluh Sembilan
Publish Play Store
Persiapan Publish
Upload
Hari ke Tigapuluh
Apa selanjutnya?
Hari Pertama
Update: Minggu, 05 Januari 2020
Pengantar
30 Hari Javascript 6
Semamat bagi teman-teman yang memutuskan untuk mengikuti series pembelajaran
javascript ini, Pada series ini Anda akan belajar Javascript dari dasar hingga tingkat
menengah. Dan pada akhir series ini Anda akan diminta untuk membuat sebuah proyek
akhir, yang dikirimkan ke email talkasrul@gmail.com. Ini hanya menguji tingkat
keseriusan anda dalam mengikuti pembelajaran saja.
Untuk diskusi saya telah siapkan group Telegram (https://www.notion.so/talkasrul/30-
Hari-Javascript-
eb5661d5bedf41cbb2381c446024e32f#192031195ff6419e9c56e7416e8915b5)
Persyaratan
Untuk mengikuti series ini Anda perlu:
3. Koneksi Internet
Persiapan
Instal NodeJS
Unduh atau download file untuk instal node js pada link ini. Silahkan download sesuai
OS Anda, disarankan mendownload nodejs dengan versi yang LTS.
30 Hari Javascript 7
Double Click file yang telah didownload dan ikuti intruksi instal nodejs hingga selesai.
Jika instal nodejs selesai dapat dicek dengan cara mengetikkan perintah ini diterminal.
node -v
Jika versi nodejs tersedia, maka dapat disimpulkan bahwa instalasi nodejs berhasil.
Instal VS Code
VS Code adalah aplikasi teks editor yang akan kita gunakan untuk menuliskan kode.
Silahkan download di sini.
30 Hari Javascript 8
Install hingga selesai, dan tampilannya seperti berikut ini.
30 Hari Javascript 9
Ikuti langkah demi langkah dan selesaikan instal google chrome.
30 Hari Javascript 10
Maka hasilnya akan seperti berikut.
Mengenal Javascript
Javascript adalah salah satu bahasa pemograman yang dapat dipakai sebagai bahasa
Backend untuk REST API atau Web Server, bisa dipakai sebagai frontend untuk web,
desktop, maupun mobile. Bahkan javascript juga bisa digunakan loh untuk robot dan
AI.
Untuk lebih jelasnya tentang javascript silahkan baca-baca di google yah. :)
30 Hari Javascript 11
Buatlah folder dengan nama 30hari sebagai tempat menyimpan file-file javascript ,js
yang kita gunakan untuk belajar. Kemudian arahkan pada terminal lalu buka VScode.
Perhatikan gambar.
Setelah Vscode terbuka maka pilih new file untuk memulai belajar.
Tipe Data
Saya rasa semua bahasa pemrograman pasti ada yang namanya tipe data. Berikut ini
adalah tipe data primitif JavaScript: String , Number , Boolean , Undefined , Null , dan
Symbol .
Number
30 Hari Javascript 12
Number itu adalah tipe data yang dapat diproses matematika, seperti tambah, kali,
bagi, dll.
String
String adalah sebuah karakter atau sekumpulan karakter yang ditulis diantara tanda
kutif tunggal atau double atau bisa juga dengan tanda backtik.
'Asrul harahap'
"Belajar Javascript"
Selamat Tahun Baru 2020
Boolean
Boolean berupa pernyataan benar atau salah dengan nilai true atau false, biasanya
digunakan untuk membandingkan atau mengecek kondisi, misal apakah hujan? bisa
true atau bisa false.
Undefined
Dalam JavaScript, jika tidak menetapkan nilai ke variabel, maka nilainya undefined .
Selain itu, jika suatu fungsi tidak mengembalikan atau return apa pun, maka nilai yang
dikembalikan adalah undefined .
Null
Null adalah nilai kosong, ini mungkin akan dibahas sesuai kasus kedepannya.
console.log(typeof 2020);
console.log(typeof "Asrul Harahap");
console.log(typeof false);
30 Hari Javascript 13
Tulis contoh pada file .js kemudian simpan dan jalankan pada terminal seperti
gambar berikut.
Komentar
Terkadang kita butuh catatan pada baris kode yang kita tulis guna untuk mengingatkan
kita sebagai developer dan bukan untuk dieksekusi oleh program. Pada javascript
memiliki beberapa cara untuk membuat Komentar.
Komentar 1 baris
/**
* conversi jam ke menit
* param jam: number
*/
function hourToMinutes(hour) {
return hour * 60;
}
30 Hari Javascript 14
Variable
Variable adalah wadah yang dapat menyimpan data. Misal variabel nama berisi Asrul
Harahap.
3. Tidak boleh menggunakan karakter khusus kecuali tanda dollar (\$) dan garis
bawah (\_)
Penulisan variabel diawali kaya kunci atau keyword var , let , atau const .
Kapan untuk penggunaan var, let, dan const akan dibahas pada
pembahasan lainnya. Sabar yah....
Hari ke Dua
Update: Senin, 06 Januari 2020
30 Hari Javascript 15
1. Array
2. Object
3. Function
Tipe data non-primitif dapat dimodifikasi atau diubah. Kita dapat memodifikasi nilai
tipe data non-primitif setelah dibuat. Mari kita lihat dengan membuat sebuah array.
Array adalah daftar nilai data yang kiapit oleh tanda kurung siku dan dipisahkan tanda
koma. Array dapat berisi tipe data yang sama atau berbeda. Nilai array dirujuk oleh
indeks masing-masing data. Dalam indeks array JavaScript dimulai dari nol. Yaitu,
elemen pertama dari sebuah array ditemukan di indeks nol, elemen kedua di indeks
satu, dan elemen ketiga di indeks dua, dan selanjutnya.
Tipe data non primitif tidak bisa dibandingkan, bahkan walau nilainya sama.
Array akan kita bahas nanti, untuk sekarang kita skip dahulu.
Number
Sedikit telah dibahas pada hari pertama bahwa tipe data number berupa bilangan bulat
dan pecahan atau desimal baik negatif maupun positif beserta dengan nol.
Contoh
30 Hari Javascript 16
let panjang = 30;
let lebar = 21.52;
let luas = panjang * lebar;
console.log("Luas adalah ", luas);
// Hasilnya: Luas adalah 645.6
Anda dapat melakukan operasi matematik baik bilangan desimal dengan desimal atau
dengan bilangan bulat.
Math
Pada javascript telah disediakan object Math yang berfungsi sebagai alat bantu dalam
urusan kalkulasi matematik seperti max, min, random, pow, dll.
Tabel Math
Method Keterangan
Math.PI PI adalah rasio keliling lingkaran terhadap diameternya; sekitar 3.14159.
Math.round Pembulatan nilai keangka terdekat
Math.floor Membulatkan nilai kebawah
Math.ceil Membulatkan nilai keatas
Math.min Mencari angka terkecil dari deretan angka
Math.max Kebalikan dari Math.min, mencari yang terbesar
Math.random Mencari nilai acak berupa 0 to 0.999999999...
Math.sqrt Mencari nilai akar dari angka yang didefenisikan
Untitled
Ada banyak lagi method matematik yang disediakan oleh javascript, silahkan baca di
sini
Contoh penggunaan pada soal berikut.
Jika diketahui sebuah lingkaran mempunyai diameter 14 cm. Berapakah luas lingkaran
tersebut?
30 Hari Javascript 17
Penyelesaian:
Diketahui:
d = 14cm
karena d = 2 × r maka:
r = d/2
r = 14/2
r = 7cm
Ditanyakan: Luas lingkaran?
Jawab:
Luas = π × r²
Luas = 3.14 × 7²
Luas = 154cm²
Jadi, luas lingkaran tersebut adalah 154 cm².
let d = 14;
let r = d / 2;
let luas = Math.PI * r * r;
console.log(luas);
// hasilnya: 153.93804002589985
console.log(Math.round(luas));
// hasilnya 154
String
Pada bagian ini kita akan perdalam lagi materi String yang telah kita bahas
sebelumnya. String didefenisikan harus menggunakan tanda kutif tunggal, dobel atau
backtik.
30 Hari Javascript 18
Kelurahan Kebayoran Lama Selatan
Kecamatan Kebayoran Lama
Kota Jakarta Selatan
DKI Jakarta - 12240
Indonesia
`;
let pekerjaan = "Full Stack Developer";
Anda dapat menggabung dua string atau lebih yang disebut dengan string concat.
Pada contoh ada penggunaan ${variable} ini adalah salahsatu cara menggunakan
concat string javascript yang disebut dengan template literal. Anda bebas
menggunakan cara pertama atau kedua, sesuai nyamannya Anda dalam ngoding.
Method .length
String memiliki properti .leng yang berfungsi untuk menghitung jumlah karakter pada
string.
console.log(nama.length);
// hasil: 14
Method .toUpperCase()
toUpperCase() digunakan untuk mentranform string menjadi huruf besar semua
30 Hari Javascript 19
let nama = "Anis Fikriyyah";
console.log(nama.toUpperCase());
// hasil: ANIS FIKRIYYAH
Method .toLowerCase()
Ini merupakan kebalikan dari .toUpperCase(), yaitu mentransform string menjadi huruf
kecil semua.
console.log(nama.toLowerCse());
// hasil: anis fikriyyah
Method .substr()
substr digunakan untuk mengiris atau memotong karakter, ini membutuhkan 2
argumen yaitu indeks mulai dan jumlah karakter yang diiris.
30 Hari Javascript 20
Method .split()
split ini digunakan untuk menjadikan string menjadi potongan array.
console.log(nama.split(" "));
// hasil: ["Asrul", "Harahap"]
console.log(firstName.split(""));
// hasil: ["A", "s", "r", "u", "l"]
console.log(countries.split(","));
// hasil: ["Asrul", "Anis", "Tisha", "Lan", "Rifki"]
Method .trim()
Digunakan untuk menghapus spasi berlebih diawal atau diakhir string
console.log(nama);
// hasil: Anies Baswedan
console.log(nama.trim());
// hasil: Anies Baswedan
Method .repeat()
Dari namanya sudah bisa kita tebak gunanya untuk apa, ya benar gunanya untuk
mengulang string sebanyak yang didefenisikan.
30 Hari Javascript 21
Masih banyak lagi method pada string seperti indexOf, replace, dll. Anda bisa baca
selengkapnya di sini
Hari ke Tiga
Update: Selasa, 7 Januari 2020
Boolean
Boolean hanya memiliki nilai benar atau salah ( true / false ). Biasanya boolean ini
digunakan untuk membandingkan nilai menggunakan operator pembanding.
Operator
Assigment Operator
Operator ini digunakan untuk mengisi nilai pada sebuah variable. Misal variable usia
diisi dengan 25.
= x = 10 x menyimpan nilai 10
+= x += 1 nilai awal x ditambahkan dengan 1 atau sama artinya dengan x = x + 1
30 Hari Javascript 22
Operator Contoh Penjelasan
console.log(nilai);
// hasilnya: 39
Operator Aritmatika
Operator ini digunakan untuk proses matematik seperti tambah, kurang, kali, bagi, dll.
console.log(bil1 * bil2);
// hasil: 50
Operator Pembanding
Pada pemrograman kita dapat membandingkan dua nilai dengan operator pembanding.
Dicek dengan hasil antara benar (true) atau salah (false).
30 Hari Javascript 23
Operator Nama Contoh
!== Sangat tidak sama dengan x !== y
> Lebih dari x>y
< Kurang dari x<y
>= Lebih dari atau sama dengan x >= y
<= Kurang dari atau sama dengan x <= y
Sering ulangi agar lebih paham penggunaan operator perbandingan ini, karena dalam
pemrograman bahasa apapun ini akan sangat sering ditemui. Bahkan saya bisa bilang
bahwa yang belum dapat memahami operator ini tidak akan bisa menjadi seorang
programmer.
Operator Logika
Terdapat tiga operator yang termasuk operator logika, yaitu:
AND, jika salah satu bernilai false maka hasilnya false.
30 Hari Javascript 24
Nilai Kiri Nilai Kanan NIlai Kiri AND Nilai Kanan
Perhatikan tabel OR, jika salah satu bernilai true maka hasilnya true.
Tabel Logika OR
NOT, kebalikan dari nilai aslinya. Tidak true artinya false, dan sebaliknya.
Operator logika akan mengevaluasi bagian kiri kemudian mengevaluasi bagian kanan,
hasil yang di return tergantung operator yang digunakan.
30 Hari Javascript 25
let hitung = 0;
console.log(++hitung);
// hasil: 1
console.log(hitung);
// hasil: 1
Pasca
let hitung = 0;
console.log(hitung--); // 0
console.log(hitung); // -1
Operator Ternary
Operator ini memungkinkan untuk menulis kondisi atau disebut operator percabangan.
Hari ke Empat
Update: Rabu, 08 Januari 2020
Percabangan
Percabangan atau sering disebut juga dengan conditional digunakan untuk
pengambilan keputusan berdasarkan kondisi-kondisi. Secara default, javascript
30 Hari Javascript 26
menjalankan percabangan dari atas kebawah. Misal jika sudah ketemu nilai true maka
selanjutnya kode akan diabaikan oleh program.
IF
Gunakan if untuk menjalankan kode yang pada kondisi yang bernilai benar.
if (syarat) {
// Jalankan kode jika syarat terpenuhi atau bernilai benar
}
Pada contoh, jika usia dibawah 18 maka program tidak menjalankan apa-apa.
IF-ELSE
IF-ELSE ini memungkinkan untuk menjalankan kode yang tidak sesuai dengan
persyaratan.
if (syarat) {
// Jalankan kode jika syarat terpenuhi atau bernilai benar
} else {
// Jalankan kode jika syarat tidak terpenuhi atau bernilai salah
}
30 Hari Javascript 27
let usia = 10;
if (usia >= 18) {
console.log("Okay selamat, Anda boleh ikut");
} else {
console.log("Maaf nak, Anda harus menunggu beberapa tahun lagi");
}
IF-ELSE IF
Mungkin anda butuh untuk mengambil keputusan dari beberapa syarat yang diajukan,
seperti halnya kehidupan sehari-hari.
if (syarat) {
// jalankan jika syarat terpenuhi
} else if (kondisi) {
// jalankan jika syarat terpenuhi dan syarat sebelumnya tidak terpenuhi
} else {
// jalankan jika semua syarat tidak terpenuhi
}
let angka = 0;
if (angka > 0) {
console.log(`${angka} adalah bilangan positif`);
} else if (angka < 0) {
console.log(`${angka} adalah bilangan negati`);
} else if (angka == 0) {
console.log(`${angka} adalah Nol`);
} else {
console.log(`${angka} bukanlah angka yang valid`);
}
// hasil: 0 adalah Nol
Switch
30 Hari Javascript 28
Switch adalah alternatif untuk if else . Blok case dijalankan jika nilai dalam tanda
kurung pernyataan cocok dengan case. Berhenti jika case telah terpenuhi.
switch (nilai) {
case 1:
// jalankan jika nilai sama dengan case 1
break;
case 2:
// jalankan jika nilai sama dengan case 2
break;
default:
// jalankan jika semua case salah
}
Ternary
Ini sudah dibahas pada hari sebelumnya, Silahkan cek kembali...
30 Hari Javascript 29
Hari ke Lima
Update: Kamis, 09 Januari 2020
Array
Array dapat menyimpan banyak data dengan tipe data yang berbeda-beda. Setiap nilai
dalam array memiliki indeks dan memiliki referensi di alamat memori. Nilai dapat
diakses dengan indeks yang dimulai dari indeks ke NOL ( 0 ). Elemen terakhir adalah
panjang indeks dikurang 1.
Array ditandai dengan kurung siku []
console.log(makanan[2]);
// hasil: indomie
console.log(makanan[2]);
// hasil: indomie
makanan[2] = "Nasi";
30 Hari Javascript 30
console.log(makanan[2]);
// hasil: Nasi
Method .concat()
Untuk menggabung dua array atau lebih bisa menggunakan concat.
console.log(isiKulkas);
// hasil: ['pisang', 'jeruk', 'mangga', 'lemon', 'Tomat', 'Kentang', 'Kubis', 'Bawang', 'W
ortel']
Method .length
Untuk mendapatkan panjang array bisa menggunakan array.length.
Method .indexOf()
30 Hari Javascript 31
Method .indexOf, digunakan untuk memeriksa apakah ada item dalam array. Jika ada, ia
mengembalikan indeks item tersebut, jika tidak ada maka mengembalikan -1 .
if (index != -1) {
console.log("Buah tersebut ada dalam kulkas, silahkan ambil");
} else {
console.log("Buah itu belum tersedia dalam kulkas");
}
Method .join()
Method .join() digunakan pada array untuk menggabungkan item-item dan
menjadikannya sebagai sting. Untuk jelasnya perhatikan contoh berikut.
console.log(mugiwara.join());
// hasil: Luffy,Zorro,Sanji,Nami
console.log(mugiwara.join("**"));
// hasil: Luffy**Zorro**Sanji**Nami
console.log(mugiwara.join(", "));
// hasil: Luffy, Zorro, Sanji, Nami
console.log(mugiwara.join("-"));
// hasil: Luffy-Zorro-Sanji-Nami
Kalau dilihat lebih teliti lagi, parameter .join() adalah penghubung yang digunakan
setelah array itu digabung.
30 Hari Javascript 32
Method .push()
Push adalah fungsi array yang akan menambahkan nilai di belakang nilai terakhir pada
array. Layaknya sebuah antrian, push adalah orang yang mengantri selanjutnya, akan
berada di posisi paling belakang. Fungsi push akan menerima satu parameter, berupa
nilai yang akan ditambahkan.
Method .pop()
Fungsi array yang akan menghapus nilai paling belakang dari array.
Method .unshift()
Unshift adalah fungsi array yang akan menambah nilai ke depan array (ke index 0), dan
menggeser seluruh isi array kebelakang.
Method .shift()
30 Hari Javascript 33
Shift adalah fungsi array yang akan menghapus nilai paling depan dari array. Fungsi
shift tidak menerima parameter apapun.
Method .sort()
sesuai nama sort adalah untuk mengurutkan. Sort mengurutkan otomatis secara
ascending dan diurutkan berdasarkan unicode dari karakter. Kamu akan menemukan
masalah ini saat mengurutkan angka.
Contoh sort array dalam bentuk angka
Contoh kasus .sort() pada angka akan bermsalah jika angka lebih dari 1 digit:
30 Hari Javascript 34
Hasil dari sort di atas tidak sesuai dengan ekspektasi kita! Seharusnya [1, 2, 15] namun
yang terjadi adalah [1, 15, 2]. Hal ini karena JavaScript melakukan sort secara unicode
atau sebagai karakter, dan karena 15 diawali dengan karakter '1', maka akan dianggap
lebih awal daripada karakter '2'. Untuk menyelesaikan masalah ini, kamu perlu
menambahkan satu parameter berupa fungsi pembanding. Mungkin kamu akan sedikit
bingung dengan code dibawah ini, namun intinya adalah kita membuat satu fungsi
yang menilai apakah nilai pertama lebih kecil dari nilai kedua.
Jika menggunakan function dalam sort maka kita juga bisa membuat fungsi sort dalam
bentuk descending, perhatikan contoh berikut.
Method .slice()
Slice adalah fungsi array yang akan mengambil irisan atau potongan dari sebuah array.
.slice() menerima satu atau dua parameter. Parameter pertama adalah index irisan
diambil, dan parameter kedua adalah index irisan terakhir diambil. Jika parameter
kedua tidak didefinisikan, irisan akan diambil hingga akhir dari array.
30 Hari Javascript 35
// hasil: [1, 2]
Ada banyak lagi method yang disediakan javascript untuk array seperti .map(),
.reduce(), .filter(), dan lainnya.
Kamu bisa baca tulisan saya ini https://asrul.dev/blog/memahami-map-filter-dan-
reduce
Array Multi-dimensi
Array multidimensi adalah sebuah array yang berisikan array lagi didalamnya.
Konsepnya penggunaannya sama dengan array biasa (satu dimensi), hanya saja jumlah
indeks yang digunakan saat mengakses nilai didalam array adalah sebanyak dimensi
dari array tersebut.
Contoh array multidimensi antara lain diagram kartesius dan matriks. Diagram
kartesius dan matriks adalah array multidimensi yang sama-sama membutuhkan
koordinat untuk mengakses nilai didalamnya.
let matriks = [
[1, 2],
[3, 4],
[5, 6],
];
console.log(matriks[0]);
// hasil: [1, 2]
console.log(matriks[0][1]);
// hasil: 2
let siswa = [
["Asrul Harahap", "Universitas Negeri Padang"],
["Anis Fikriyyah", "Universitas Bale Bandung"],
];
console.log(siswa[1]);
// hasil: ['Anis Fikriyyah', 'Universitas Bale Bandung']
30 Hari Javascript 36
console.log(siswa[0][1]);
// hasil: 'Universitas Negeri Padang'
Hari ke Enam
Update: Jumat, 10 Januari 2020
Perulangan
Perulangan sangat sering dilakukan dalam keehidupan sehari-hari, misalkan ibu Anis
akan mengupas kentang dalam kantong plastik sebanyak 100 buah kentang. Maka ibu
Anis akan kupas kentang pertama, selsai kupas kentang kedua, dan seterusnya hingga
ketang terakhir adalah 100.
Dalam bahasa pemograman, perulangan ini disebut dengan looping.
For Loop
30 Hari Javascript 37
for (let i = 5; i >= 0; i--) {
console.log(i);
}
// hasil:
// 5
// 4
// 3
// 2
// 1
While loop
Looping yang tidak tentu, maksudnya selalu melakukan looping hingga syarat
terpenuhi.
let i = 0;
while (i <= 5) {
console.log(i);
i++;
}
// hasil:
// 0
// 1
// 2
// 3
// 4
// 5
For Of
let pelajaran = [
"HTML",
"CSS",
"JavaScript",
"React",
"Redux",
"Node",
"MongoDB",
];
30 Hari Javascript 38
// hasil:
// HTML
// CSS
// JAVASCRIPT
// REACT
// NODE
// MONGODB
Sebenarnya ada beberapa cara looping dalam javascript lainnya, anda bisa baca di sini
Object Literal
JavaScript merupakan bahasa pemrograman yang berbasis simple-object (Objek
sederhana). Objek adalah kumpulan tidak berurut yang merangkai beberapa property
dan property memiliki nama/key dan value (key-value pairs).
Objek dalam JavaScript, sama seperti banyak bahasa pemrograman lainnya, bisa
dibandingkan dengan objek dalam kehidupan nyata.
Untuk membuat sebuah object literal bisa dengan cara menuliskan kurung kurawal
(curly bracets) kemudian menuliskan nama property yang harus memiliki key dan
value.
let obj = {
key: "value",
};
Value dalam object literal selain string bisa juga dengan memasukkan value array
bahkan value object literal lainnya.
Kita bisa coba dengan kode berikut:
let asrulObj = {
id: "1221092408940001",
nama: "Asrul Harahap",
lahir: {
tempat: "Medan",
tgl: "1994-08-24",
},
favorit: [
"coding",
"membaca",
{
30 Hari Javascript 39
olahraga: ["renang", "mendaki"],
makanan: ["bakmi gm", "yosinoya"],
},
],
alamat: {
jalan: "Jl. Tanah Kusir II",
kelurahan: "Kebayoran Lama Selatan",
kecamatan: "Kebayoran Lama",
kota: "Jakarta Selatan",
provinsi: "Sumatera Utara",
kodePos: 12240,
},
};
console.log(asrulObj.alamat.kota);
// hasil: Jakarta Selatan
console.log(asrulObj.favorit[2].makanan[1]);
// hasil: yosinoya
Mengubah nilai
Hampir sama dengan cara akses, tapi gunakan tanda sama dengan untuk memberi nilai
baru, perhatikan contoh sesuai objek diatas.
console.log(asrulObj.alamat.provinsi);
// hasil: Sumatera Utara
Hari ke Tujuh
Update: Sabtu, 11 Januari 2020
30 Hari Javascript 40
Latihan
1. Silahkan deklarasikan perang!
6. Buatlah kode untuk kocok dadu ludo yang nilainya random 1 hingga 6!
8. Buatlah program untuk mengkonversi bulan angka menjadi kata, misal 1 menjadi
Januari, 2 menjadi Februari, dst!
9. Gabunglah array berikut menjadi kalimat yang bisa dibaca dengan baik, ["Aku",
10. Ubahlah nilai dari variable a menjadi variable b, dan variable b menjadi variable a
let a = 10;
let b = 8;
// hasil yang diharapkan
// a = 8
// b = 10
#
##
###
####
#####
######
#######
30 Hari Javascript 41
0 x 0 = 0
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
6 x 6 = 36
7 x 7 = 49
8 x 8 = 64
9 x 9 = 81
10 x 10 = 100
1. Soal Cerita
Toko Jaya Baru yang sedang melakukan SALE ingin menghitung jumlah profit untuk
setiap jenis barang yang terjual pada hari itu.
Barang-barang SALE yang akan dihitung penjualannya:
Sepatu brand Sanji seharga 1500000 dan stock barang yang tesedia 10
Baju brand Zoro seharga 500000 dan stock barang yang tesedia 2
Sweater brand Hinata seharga 175000 dan stock barang yang tersedia 1
Function akan menerima array yang berisikan object pembeli (nama pembeli, barang
yang ingin dibeli dan jumlah barang yang dibelinya). Jika stock barang kurang dari
jumlah yang ingin dibeli oleh pembeli maka pembeli batal untuk membeli barang
tersebut.
Function hitungProfit akan mengembalikan/me-return sebuah array of object dimana
array tersebut berisi objek-objek barang dari toko Jaya Baru tersebut yang berisikan info
nama barang, siapa saja yang membeli, sisa stock barang dan total pemasukan untuk
barang tersebut
Penampakan Kode
function hitungProfit(shoppers) {
let listBarang = [ ['Sepatu Sanji', 1500000, 10],
['Baju Zoro', 500000, 2],
['Sweeter Hinata', 175000, 1]
];
30 Hari Javascript 42
// TEST CASES
console.log(hitungProfit([{name: 'Anis Fikriyyah', product: 'Sepatu Sanji', amount: 2}, {n
ame: 'Asrul Harahap', product: 'Sepatu Sanji', amount: 3}, {name: 'Ghazala Tisha', produc
t: 'Sweeter Hinata', amount: 2}]));
//[ { product: 'Sepatu Sanji',
// shoppers: [ 'Anis Fikriyyah', 'Asrul Harahap' ],
// leftOver: 5,
// totalProfit: 7500000 },
// { product: 'Baju Zoro',
// shoppers: [],
// leftOver: 2,
// totalProfit: 0 },
// { product: 'Sweeter Hinata',
// shoppers: [],
// leftOver: 1,
// totalProfit: 0 } ]
console.log(hitungProfit([]));
//[]
30 Hari Javascript 43
Kamu bisa kirim jawabannya dalam bentuk .zip pada link berikut.
https://fs23.formsite.com/TezH4N/30jsminggu1/index.html
Function
Function adalah sebuah blok kode yang disusun sedemikian rupa untuk menjalankan
sebuah tindakan.
Blok kode ini dibuat untuk dapat bisa digunakan kembali. Cara atau bentuk penulisan
function adalah
sebagai berikut:
30 Hari Javascript 44
Cara Memanggil function
Untuk menjalankan function butuh dipanggil, caranya yaitu dengan menuliskan nama
function dan diikuti tanda buka tutup kurung atau disebut invoke () .
function hi() {
console.log("Hai, asrul dev!");
}
Void Function
Void function adah function yang tidak melakukan return atau tidak memberikan
kembalian terhadap yang memanggilnya.
function hai() {
console.log("halo!");
}
tampilkan();
Return Function
function munculkanAngkaDua() {
return 2;
}
function kalikanDua(angka) {
return angka * 2;
}
30 Hari Javascript 45
console.log(tampung);
// hasil: 10
function tampilkanAngka(angka = 1) {
return angka;
}
console.log(tampilkanAngka(5));
// hasil: 5
console.log(tampilkanAngka());
// hasil: 1
Anda juga dapat menampung function sebagai variable dengan sebuah bentuk function
yang dinamakan Anonymous Function.
console.log(fungsiPerkalian(2, 4));
// hasil: 8
CallBack
Function yang dilewatkan sebagai parameter disebut callback.
Perhatikan kode berikut.
function sapa(nama) {
alert("Hello " + nama);
}
function prosesMenyapa(callback) {
let nama = prompt("Namamu siapa?");
callback(nama);
}
prosesMenyapa(sapa);
30 Hari Javascript 46
Jelas terlihat bahwa pada function prosesMenyapa() mengirimkan function callback()
sebagai parameter, dan inilah yang disebut dengan callback. Callback sering digunakan
untuk data asyncronous sehingga data dapat ditunggu selesai baru lanjutkan program.
Hari ke Delapan
Update: Minggu, 12 Januari 2020
Module
Modul adalah cara untuk membagi-bagi kode menjadi beberapa file sehingga dapat
dipakai ulang. Jika kita ibaratkan dengan penulis, penulis yang baik adalah penulis yang
membagi-bagikab bukunya menjadi beberapa bab. Begitu juga dengan programmer
yang membagi-bagi kodenya menjadi beberapa module.
Perhatikan penggunaan module berikut pada file index.js dan file sapa.js .
File sapa.js
function halo(nama) {
return `Halo, ${nama}`;
}
function hi() {
return "Hi, apa kabar?";
}
module.exports = {
halo,
hi,
};
File index.js
console.log(sapa.halo("Asrul Dev"));
// hasil: Halo, Asrul Dev
30 Hari Javascript 47
console.log(sapa.hi());
// hasil: Hi, apa kabar?
Kita telah belajar dasar-dasar javascript, sekarang saatnya kita menggunakan pelajaran
dasar tersebut untuk membangun sebuah aplikasi. Saat ini kita akan belajar backend
yaitu menggunakan express js
Menyiapkan Proyek
Proyek yang akan kita buat harus diletakkan terpisah dengan file lain, sehingga dalam 1
folder tersebut hanya ada proyek kita saja.
Pada pembelajaran series ini saya akan membuat folder proyek dengan nama express-
30-js. Setelah folder dibuat arahkan terminal ke folder tersebut dengan cara:
cd ~/Desktop/express-30-js
Folder proyek saya berada di Desktop, jika berbeda dengan saya silahkan disesuaikan.
Sehingga penampakannya seperti berikut.
30 Hari Javascript 48
Jika sudah diarahkan pada terminal, selanjutnya lakukan inisial proyek node js dengan
perintah berikut.
npm init
30 Hari Javascript 49
Proses ini dilakukan untuk membuat sebuah file package.json yang berguna untuk
mengontrol proyek node js. Berikut isi file package.json yang dihasilkan.
{
"name": "express-30",
"version": "1.0.0",
"description": "belajar expres bersama asrul.dev",
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "Asrul harahap",
"license": "ISC"
}
Install Express Js
30 Hari Javascript 50
Express js adalah framework javascript tepatnya pada NodeJs yang berfungsi untuk
membantu pengembangan web dan mobile.
Setelah diinstall kita dapat melihat perubahan pada file package.json menjadi seperti
berikut.
{
"name": "express-30",
"version": "1.0.0",
"description": "belajar expres bersama asrul.dev",
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "Asrul harahap",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
30 Hari Javascript 51
Membuat Web Server
Web server adalah perangkat lunak yang berfungsi sebagai penerima permintaan yang
dikirimkan melalui browser kemudian memberikan tanggapan permintaan dalam
bentuk halaman situs web atau lebih umumnya dalam dokumen HTML, tapi bisa juga
berupa suara, gambar, json, xml atau lainnya.
Pada proyek buatlah file baru dengan nama index.js yang isinya seperti berikut ini.
app.listen(5000, function () {
console.log(`Server running on http://localhost:5000`);
});
module.exports = app;
node index.js
30 Hari Javascript 52
Sampai sejauh ini kita sudah belajar dan berhasil membuat webserver.
Hari ke Sembilan
Update: Senin, 13 Januari 2020
30 Hari Javascript 53
Insomnia REST aja ing insomnia, kita mah... mungkin juga kali yah karena harus nulis
series ini hehehe...
Penggunaan Keterangan
Method
Express
GET app.get() Method GET biasanya digunakan hanya mengambil data.
Method POST digunakan untuk mengirimkan entitas ke server yang
POST app.post() ditentukan, sering menyebabkan perubahan pada keadaan atau efek
samping pada server.
PUT app.put() Method PUT menggantikan data yang ada dengan data yang dikirimkan.
DELETE app.delete() Method DELETE untuk menghapus data yang ada.
30 Hari Javascript 54
Penjelasan HTTP method bisa dibaca di sini
Request
Berdasarkan gambar dapat kita lihat bahwasanya kita atau user melakukan request
terhadap server dengan method http melalui url atau alamat server tersebut.
HTTP method yang telah dijelaskan sebelumnya dipakai sebagai pengenal untuk
mengirimkan permintaan terhadap server. Perhatikan contoh berikut.
File index.js
30 Hari Javascript 55
app.listen(5000, function () {
console.log(`Server running on http://localhost:5000`);
});
module.exports = app;
Express telah menyediakan function atau method yang bertindak sebagai request,
berikut beberapa daftar request yang disediakan oleh express:
Properti Deskripsi
.app Referensi object pada express
Berisi informasi cookie yang dikirim, ini dapat digunakan jika menggunakan
.cookies
middleware cookie-parser
.hostname Informasi hosname web server
.ip Informasi IP server
.method HTTP Methode yang digunakan
.params Menampilkan informasi sesuai dengan nama parameter
.path Nemampilkan informasi jalur URL
.protocol Menampilkan protocol request
.query Objek yang berisi informasi query dari request yang berlangsung
30 Hari Javascript 56
Properti Deskripsi
.secure true jika request merupakan reques yang secure (digunakan pada HTTPS)
Berisi signed cookies oleh request, dapat digunakan jika menggunakan
.signedCookies
middleware cokie-parser
.xhr Bernilai true jika request adalah XMLHttpRequest
.body Berisi data yang dituliskan pada body request
.header Berisi data yang dituliskan pada header request
.baseUrl Informasi pengalamatan utama web server
.originalUrl Informasi pengalamatan request dilakukan
?nama=Asrul&umur=25
Penulisan query pada request diawali dengan tanda ? setelah endpoint, dan jika ada
beberapa query dipisahkan dengan tanda & . Query memiliki key dan value, key sebelah
kiri dari tanda = dan value berada pada sebelah kanan tanda = . Perhatikan gambar
berikut.
Response
30 Hari Javascript 57
Kabalikan dari request, response adalah proses layanan yang diberikan server pada
client yang melakukan request. Sama halnya dengan request, function atau method
response sangat banyak yang disedikan oleh express.
Properti Deskripsi
.send() Mengirim dan menampilkan data string ke user
.end() Mengakhiri response server
.status() Informasi HTTP status, seperti 200, 404, dll
.json() Menjadikan response sebagai data JSON
.render() Merender file sebagai HTML
.download() Memberikan response sebagai file yang dapat diunduh
.type() Menyetting tipe response server
.redirect() Mengalihkan halaman ke halaman yang lain
Hari ke Sepuluh
Update: Selasa, 14 Januari 2020
Router
Router adalah arah jalannya program, sehingga ketika ada request misal /login maka
router akan mengarahkan server menjalankan controller melalui /login sehingga
mendapatkan response.
30 Hari Javascript 58
Sebelumnya kita telah menggunakannya pada file index.js tetapi Bagaimana jika kita
memiliki route yang sangat banyak misal 3000 route?. Maka kita perlu organisir
rute kita agar lebih rapi dan mudah untuk dimaintenance.
Buatlah folder baru pada proyek kita dengan nama routes dan isinya file router.js .
Pindahkan kode dari file index.js yang mengandung rute ke file router.js dan
tambahkan kode untuk method .Router() sehingga seperti berikut.
File router.js
30 Hari Javascript 59
});
module.exports = router;
app.use("/", router);
app.listen(5000, function () {
console.log(`Server running on http://localhost:5000`);
});
module.exports = app;
Jika dilakukan ujicoba pada endpoint pada materi request dan response tidak ada
perubahan, saya ucapkan selamat. :) Anda berhasil memisahkan file server dan router.
Controller
Controller adalah proses melakukan kontrol atau logika dan komputasi pada sebuah
aplikasi sebelum dikirimkan ke user sebagai response. Disini kontrol masih bergabung
30 Hari Javascript 60
dengan router. Mari kita buat sebuah folder dengan nama controller dan buat sebuah
file dengan nama jodoh.controller.js sehingga hasilnya seperti berikut.
File jodoh.controller.js
module.exports = {
getJodoh,
setJodoh,
updateJodoh,
deleteJodoh,
};
router.get("/cari-jodoh", jodoh.getJodoh);
router.post("/cari-jodoh", jodoh.setJodoh);
router.put("/cari-jodoh", jodoh.updateJodoh);
router.delete("/cari-jodoh", jodoh.deleteJodoh);
30 Hari Javascript 61
});
module.exports = router;
Jika hasilnya tidak berubah, saya ucapkan sekali lagi selamat Anda berhasil. :)
Hari ke Sebelas
Update: Rabu, 15 Januari 2020
Sebelum kita masuk ke materi database, kita siapkan tools nya dulu yah, yang
dibutuhkan selain yang sudah kita install sebelumnya adalah MySQL, biar gak ribet
installnya baik di Linux, Windows, atau Mac saya sama ratakan saja memakai XAMPP.
30 Hari Javascript 62
Bisa download disini
Jika sudah download pastikan MySQL berjalan dengan baik sehingga kita bisa membuka
database di http://localhost/phpmyadmin (mungkin sedikit berbeda dilaptop Anda,
silahkan disesuaikan), seperti berikut.
30 Hari Javascript 63
Install Sequelize Cli
Tools command line atau cli yang dapat kita gunakan melalui terminal untuk
menggenerate sequelize, maka Sequelize cli harus diinstall terlebih dahulu dengan
cara.
npm i -g sequelize-cli
Install Sequelize
Pada folder proyek express-30-js install sequelize dengan cara:
npm i sequelize
{
"name": "express-30",
"version": "1.0.0",
"description": "belajar expres bersama asrul.dev",
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "Asrul harahap",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"sequelize": "^5.21.3"
30 Hari Javascript 64
}
}
Initisalize Sequelize
Agar proyek dikenali menggunakan sequelize, lakukan perintah berikut.
sequelize init
Koneksi Database
Database yang kita gunakan adalah MySQL, untuk menjalankan mysql, sequelize
membutuhkan library tambahan yaitu mysql2 . Install dengan cara.
npm i mysql2
{
"name": "express-30",
"version": "1.0.0",
"description": "belajar expres bersama asrul.dev",
30 Hari Javascript 65
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "Asrul harahap",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"mysql2": "^2.1.0",
"sequelize": "^5.21.3"
}
}
Konfigurasi database dengan membuka file config.json dan sesuaikan dengan MySql
Anda. Kira-kira seperti ini.
{
"development": {
"username": "root",
"password": "",
"database": "db_30_hari",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}
}
Sesuai dengan file config.json , buat database dengan nama db_30_hari. Perhatikan
gambar berikut.
30 Hari Javascript 66
Membuat Model
Setelah database dibuat, kita pindah ke terminal untuk membuat Model, pada contoh
ini nama model yang kita buat adalah User.
Akan menghasilkan file dengan nama user.js pada folder model yang hasilnya seperti
berikut.
"use strict";
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
30 Hari Javascript 67
"User",
{
name: DataTypes.STRING,
label: DataTypes.STRING,
picture: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.STRING,
website: DataTypes.STRING,
summary: DataTypes.STRING,
},
{}
);
User.associate = function (models) {
// associations can be defined here
};
return User;
};
Migrate Model
Model yang telah dibuat, hanya sebtas file saja. Untuk mengubah file model ke tabel
pada database maka lakukan migrate db dengan perintah berikut.
sequelize-cli db:migrate
Sekarang model dan tabel sudah selesai, kita siap untuk melakukan CRUD terhadap
data tabel yang telah kita miliki.
30 Hari Javascript 68
Hari ke Dua Belas
Update: Kamis, 16 Januari 2020
Karena kita sudah memiliki model dan tabel user. Sekarang saatnya kita melakukan
operasi CRUD, Create, Read, Update dan Delete.
Buatlah file route pada folder routes dengan nama user.router.js yang isinya seperti
berikut.
router.post("/", userController.createUser);
router.get("/", userController.readUser);
router.put("/:id", userController.updateUser);
router.delete("/:id", userController.deleteUser);
module.exports = router;
Buatlah file pada folder controller dengan nama user.controller.js yang isinya seperti
berikut.
module.exports = {
createUser,
readUser,
updateUser,
deleteUser,
};
30 Hari Javascript 69
Route Method Keterangan
/users POST Menambahkan atau create user baru
/users GET Mengambil data seluruh user
/users/:id PUT Mengubah data user sesuai id
Create
Create yang berarti kita menambahkan data baru ke database. Untuk menambahkan
data baru, silahkan modifikasi function createUser menjadi.
diambil dari data body sesuai dengan fieldnya yang dikirimkan oleh insomnia
req.body
atau pada web nyata adalah dari form input. Ini akan berfungsi jika pada server kita beri
middleware untuk menghandle nya.
30 Hari Javascript 70
const router = require("./routes/router.js");
app.listen(5000, function () {
console.log(`Server running on http://localhost:5000`);
});
module.exports = app;
Dan hubungkan router user pada file router.js , sehingga file router.js menjadi seperti
berikut.
router.use("/users", user);
router.get("/cari-jodoh", jodoh.getJodoh);
router.post("/cari-jodoh", jodoh.setJodoh);
router.put("/cari-jodoh", jodoh.updateJodoh);
router.delete("/cari-jodoh", jodoh.deleteJodoh);
module.exports = router;
30 Hari Javascript 71
Lakukan pengujian menggunakan insomnia dan gunakan form untuk mengentri data,
perhatikan gambar.
Read
Read adalah membaca atau menarik data dari database. Langsung saja ubah function
30 Hari Javascript 72
res.json({ error: error });
});
}
Sebelumnya saya telah menambahkan data Anis Fikriyyah. Sekarang silahkan kita uji
menggunakan insomnia.
Update
Update adalah mengubah data yang sudah tersimpan dengan data yang baru.
Ubah function updateUser menjadi seperti berikut.
30 Hari Javascript 73
},
}
)
.then(function (result) {
res.json(result);
})
.catch(function (error) {
res.json({ error: error });
});
}
Terlihat bahwa sebelumnya Full Stack Dev telah berubah menjadi React Developer,
lihat gambar berikut.
Delete
Untuk menghapus data maka ubah function deleteUser sehingga menjadi berikut.
30 Hari Javascript 74
});
}
Authentication
Pada tabel user kita telah memiliki beberapa kolom yaitu id, name, label, picture,
email, phone, website, summary tetapi untuk melakukan login kita butuh setidaknya
email dan password, karena itu kita akan menambahkan kolom password .
30 Hari Javascript 75
Untuk menambahkan kolom pada sequelize, lakukan peintah berikut.
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn("Users", "password", Sequelize.STRING);
},
sequelize db:migrate
30 Hari Javascript 76
Jika kolom telah kita tambahkan, jangan lupa ubah model agar sesuai dengan tabel.
Ubah file user.js sehingga menjadi seperti berikut.
"use strict";
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
"User",
{
name: DataTypes.STRING,
label: DataTypes.STRING,
picture: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.STRING,
website: DataTypes.STRING,
summary: DataTypes.STRING,
password: DataTypes.STRING,
},
{}
);
User.associate = function (models) {
// associations can be defined here
};
return User;
};
Register User
Proses register merupakan proses untuk mendaftarkan identitas yang memiliki kunci
untuk masuk kembali. Data yang bersifat sensitif harus kita lakukan encripsi. Pada
kasus ini kita butuh library bcryptjs yang berfungsi untuk mengencripsi data. Intall
bcryptjs dengan cara.
30 Hari Javascript 77
npm i bcryptjs
model.User.create({
name: req.body.name,
label: req.body.label,
picture: req.body.picture,
email: req.body.email,
phone: req.body.phone,
website: req.body.website,
summary: req.body.summary,
password: hash,
})
.then(function (result) {
res.json(result);
})
.catch(function (error) {
res.json({ error: error });
});
}
30 Hari Javascript 78
Token User
Pada sebuah aplikasi setelah seseorang login maka dibutuhkan token sebagai credential
terpercaya untuk mengelola data, misal update atau mungkin hapus.
Kalau dicontohkan ke kehidupan nyata email dan password adalah tiket untuk naik
pesawat yang ditukarkan saat check in hingga mendapatkan boarding pass. Boarding
pass inilah yang kita gunakan untuk masuk ke pesawat. Sama halnya dengan token,
token didapatkan setelah login dilakukan, sehingga token dikirim bersamaan dengan
akses pada server lebih dalam.
Untuk membuat token kita menggunakan library jsonwebtoken , install dengan cara
berikut.
npm i jsonwebtoken
Tambahkan function loginUser pada file user.controller.js , yang isinya seperti berikut.
model.User.findOne({
where: {
30 Hari Javascript 79
email: email,
},
})
.then(function (result) {
let passwordHash = result.password;
let checkPassword = bcrypt.compareSync(password, passwordHash);
if (checkPassword) {
res.json({
message: "Berhasil Login",
token: jwt.sign({ id: result.id }, "asrul-dev"),
});
} else {
res.json({
message: "Gagal Login",
});
}
})
.catch(function (error) {
res.json({ error: error });
});
}
Jangan lupa tambahkan route pada file user.route.js , sehingga menjadi seperti berikut.
router.post("/login", userController.loginUser);
router.post("/", userController.createUser);
router.get("/", userController.readUser);
router.put("/:id", userController.updateUser);
router.delete("/:id", userController.deleteUser);
module.exports = router;
30 Hari Javascript 80
Akhirnya berhasil juga, tapi tidak sampai disitu kita harus melakukan autorize, yaitu
memberi hak akses terhadap aktifitas data. Seperti update dan delete pada kasus ini
hanya boleh dilakukan orang yang memiliki akun tersebut.
Authorize
Penggunaan authorize kita harus membuat middleware, middleware adalah perantara
route dan controller, sehingga ketika melewati route menuju controller akan dilakukan
pemeriksaan, apakah memiliki autorize atau tidak.
Buat file baru dengan nama auth.js dalam folder middlewares , yang isinya berikut.
model.User.findOne({
where: {
id: verify.id,
},
})
.then(function (result) {
if (result) {
req.decoded = verify;
next();
} else {
res.status(401).json({
message: "Kamu tak punya akses",
});
}
})
.catch(function (error) {
30 Hari Javascript 81
res.json({ error: error });
});
} else {
res.status(401).json({
message: "Silahkan Login Dahulu",
});
}
};
router.post("/login", userController.loginUser);
router.post("/", userController.createUser);
router.get("/", userController.readUser);
router.put("/:id", auth, userController.updateUser);
router.delete("/:id", auth, userController.deleteUser);
module.exports = router;
Pada saat update dan delete, jika yang mengakses bukan yang login maka data dilarang
diubah atau dihapus. Untuk melakukan itu ubah function updateUser dan function
deleteUser menjadi seperti berikut.
30 Hari Javascript 82
.then(function (result) {
res.json(result);
})
.catch(function (error) {
res.json({ error: error });
});
} else {
res.json({
message: "Ini bukan data Anda",
});
}
}
Kita uji pada insomnia dengan skenario, token adalah milik user dengan id 3, tetapi
yang akan dihapus adalah user id 4.
30 Hari Javascript 83
Untuk kode lengkap silahkan lihat disini
Latihan
Latihan lagi yah :)
const users = [
{
user: "king David Martins",
age: 21,
active: true,
},
{
user: "ashley",
age: 23,
active: false,
},
{
user: "alex",
30 Hari Javascript 84
age: 43,
active: true,
},
{
user: "john",
age: 32,
active: true,
},
{
user: "chris",
age: 21,
active: false,
},
{
user: "tomlin",
age: 32,
active: false,
},
{
user: "vernon",
age: 34,
active: true,
},
{
user: "Boni",
age: 43,
active: true,
},
{
user: "mattt",
age: 32,
active: true,
},
{
user: "bridget",
age: 23,
active: false,
},
{
user: "kyle",
age: 65,
active: true,
},
{
user: "julia",
age: 22,
active: true,
},
{
user: "jake",
age: 23,
active: false,
},
];
30 Hari Javascript 85
1. Jika active adalah sedang online, carilah siapa saja user yang sedang online!
3. Berdasarkan data diatas, buatlah CRUD untuk menyimpan user, age, dan active
menggunakan express dan mysql!
4. Buat fitur search yang dapat mencari usia, nama, dan sedang online, dengan
endpoint seperi /users?q=asrul !
Deploy Server
Saatnya kita awankan yang telah kita buat 1 minggu belakangan ini, sehingga ini
berguna nanti untuk materi web react js dan mobile react native.
Mysql Online
Pertama kita butuh server database MySQL online. Setelah lelah mencari, saya temukan
mysql free dan lumayan cocok untuk tahap belajar di https://remotemysql.com,
langsung daftar seperti gambar berikut.
Setelah selesai daftar silahkan konfirmasi pendaftaran yang dikirimkan via email.
Setelah selesai silahkan login untuk membuat database.
30 Hari Javascript 86
Create database dan sesuaikan config.json pada proyek dengan yang didapatkan dari
remotemysql.com. Ini gambar PHPmyadmin online.
{
"development": {
"username": "Z51nuZUx5o",
"password": "rahasia",
"database": "Z51nuZUx5o",
"host": "remotemysql.com",
"dialect": "mysql",
"port": 3306,
"operatorsAliases": false
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"production": {
"username": "Z51nuZUx5o",
"password": "rahasia",
"database": "Z51nuZUx5o",
"host": "remotemysql.com",
"dialect": "mysql",
"port": 3306,
"operatorsAliases": false
}
}
sequelize db:migrate
30 Hari Javascript 87
Heroku
Download terlebih dahulu heroku, sesuaikan dengan OS yang Anda pakai, seperti
gambar berikut.
30 Hari Javascript 88
Jika heroku berhasil diinstall maka tampilannya seperti berikut.
Maka proses selanjutnya silahkan login jika sudah memiliki akun heroku, jika belum
silahkan daftar dahulu.
heroku login
30 Hari Javascript 89
Jika heroku create telah berhasil, maka selanjutnya buat file baru dengan nama
`procfile` yang isinya seperti berikut.
npm i cors
Lakukan sedikit modifikasi pada file index.js dengan menginstall cors sebagai
middleware yang memperbolehkan diakses dengan beda alamat host dan tambahkan
juga port.
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use("/", router);
app.listen(port, function () {
console.log(`Server running on <http://localhost>:${port}`);
});
module.exports = app;
30 Hari Javascript 90
Tambahkan file .gitignore untuk membatasi upload file git ke heroku, disini kita butuh
mengignore folder node_modules sehingga isi file .gitignore sebagai berikut
Ubah juga file package.jso dengan menambahkan script start, perhatikan gambar
berikut.
node_modules
git init
Buka heroku secara online dan cek git yang diberikan oleh heroku, lalu pada terminal
lakukan perintah remote git tersebut.
30 Hari Javascript 91
heroku git:remote -a warm-refuge-26108
git add .
git commit -m "Deploy dengan bismillah"
git push heroku master
heroku open
Selanjutnya yok uji coba pada insomia, jika berhasil artinya deploy kita sukses.
30 Hari Javascript 92
Hari ke Lima Belas
Update: Minggu, 19 Januari 2020
Pengenalan ES6
ES6 dan + adalah Javascript versi modern kalo Asrul sendiri yang ngomong karena
fiturnya aduhai, jatuh cinta banget lah. Maaf kalau udah mulai lebay.
Awalnya javascript hanya punya var sebagai deklarasi dari sebuat variable.
Tapi sekarang telah ditambahkan const dan let , bertanya, apasih bedanya?
var mencakup fungsi variable ke lingkup "global" jika berada di tingkat atas. Link
referensi: https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Statements/var
30 Hari Javascript 93
const adalah untuk variabel yang tidak ingin Anda diubah nilainya (read only). Link
referensi: https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Statements/const
let adalah untuk variable yang bisa diubah nilainya kembali. Link referensi:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
Arrow Function
Perhatikan penulisan function dengan arrow function.
Function Normal
function panggilAku() {
return "Asrul Harahap";
}
Function Normal
30 Hari Javascript 94
Helper ES6
Beberapa helper yang dipakai untuk membantu koding Anda pada ES6, yaitu: map,
filter, find, dll. Untuk lebih jelas saya telah menulisnya sebelumnya pad postingan
berikut. Baca Postingan
Module
Perhatikan penggunaan module ES6 berikut pada file index.js dan file sapa.js .
File sapa.js
File index.js
console.log(hi());
// hasil: Hi, apa kabar?
Dasar-dasar DOM
DOM merupakan singkatan dari Data Object Model yang digunakan untuk
memanipulasi apa saja yang ada dalam struktur HTML, memanipulasi yang dimaksud
berupa menambah, mengubah, atau menghapus elemen dalam HTML.
DOM akan dimuat oleh browser ketika semua file html sudah selesai dijalankan.
30 Hari Javascript 95
Ini materi tambahan sebagai penguat masuk React Js. Buat file
dengan .html untuk uji coba materi ini.
Selector DOM
Berdasarkan ID
<div id="boxs">
</div>
<script>
document.getElementById("boxs").innerHTML = "Halo DOM, ayo belajar"
</script>
Berdasarkan Class
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<script>
document.getElementByClassName("box")[0].innerHTML = "Javascript"
document.getElementByClassName("box")[1].innerHTML = "PHP"
document.getElementByClassName("box")[2].innerHTML = "Python"
</script>
Berdasarkan Tag
30 Hari Javascript 96
Contoh mengambil data dari form input
<form onsubmit="submitForm()">
<label>
Nama: <br />
<input type="text" id="name">
</label>
<button type="submit">Cek</button>
</form>
<script>
function submitForm() {
var name = document.getElementById('name').value;
<div id="lembar-kerja"></div>
<script>
var img = document.createElement('img');
var lembarKerja = document.getElementById('lembar-kerja')
img.setAttribute('src', 'https://avatars2.githubusercontent.com/u/15111402?s=460&v=4')
img.setAttribute('width', '200')
img.setAttribute('height', '200')
lembarKerja.appendChild(img)
</script>
30 Hari Javascript 97
Mengedit Element
Mengganti elemen pada html
<div id="place">
<h2 id="old">Old Text<h2>
</div>
<script>
var newEl = document.createChild('h3')
var text = document.createTextNode('New Text')
newEl.appendChild('text')
place.replaceChild(newEl, old)
</script>
Menghapus Element
Menghapus elemen pada html
<div id="place">
<h2 id="ada">ada Text<h2>
<h2 id="ilang">Ilang Text<h2>
</div>
<script>
var ilang = document.getElementById('ilang')
var place = document.getElementById('place')
place.removeChild(ilang)
</script>
30 Hari Javascript 98
<button onclick="panggilFungsi()">Klik</button>
<script>
function () {
alert(input.value)
}
</script>
AddEventListener
Event DOM
30 Hari Javascript 99
No. Nama Event Keterangan
<div id="lembar-kerja"></div>
<script>
var img = document.createElement('img');
var lembarKerja = document.getElementById('lembar-kerja')
img.setAttribute('src', 'https://avatars2.githubusercontent.com/u/15111402?s=460&v=4')
img.setAttribute('width', '200')
img.setAttribute('height', '200')
lembarKerja.appendChild(img)
img.addEventListener('mouseenter', function() {
alert('Kamu menyentuh gambar orang ganteng itu')
})
</script>
React Js
Reactjs adalah library javascript untuk membangun UI (User Interface) pada web.
Sekarang ini banyak sekali perusahaan-perusahaan yang mencari developer yang bisa
menguasai React, sehingga kita belajar react akan menjadi investasi yang baik untuk
karir di TI. React sendiri sangatlah populer, mari lihat repositori react berikut.
Install React Js
Langsung saja, untuk install react kita gunakan Create React App saja sesuai saran dari
reactjs sendiri.
Berikut memperlihatkan struktur direktori dan halaman web aktual dari aplikasi CRA
yang baru saja dibuat.
.
├── README.md
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── serviceWorker.js
└── yarn.lock
npm start
WTF JSX
Udah belajar javascript, terus belajar ES6 dan sekarang pas mau belajar React Js harus
belajar JSX juga. Sabar, JSX atau Javascript Extension bukan untuk mempersulit Anda,
malah membantu untuk mempermudah dalam koding js yang terlihat seperti html.
Lihat perbedaan menggunakan JSX dan tidak pada komponen berikut.
Dengan JSX
Component
Component class
Membuat component dengan class pada react disebut sebagai component state full
render() {
return <div>Wellcome Asrul</div>;
}
}
Props
Props adalah cara component mengoper data yang berasal dari parent ke child dengan
kata lain garis lurus kebawah.
<Hello name="Asrul">
Dari component diatas misal sebuah component Hello dengan propertu name pada
kode diatas, maka itu akan menurunkan data pada child Hello dengan props dengan
key name dan value Asrul
Mengakses Props
Pada induk telah mengover data dengan key name dan value Asrul, maka pada child
akan bisa diakses dengan cara:
State
State adalah tempat Anda menyimpan data pada component dan hanya bisa diakses
oleh component itu sendiri secara default, tetapi bisa diturunkan pada child jika
menggunkan props.
state = {
name: "",
};
this.setSetate(
{
name: "Asrul",
},
callback
);
Mengakses State
Anda telah mengetahui bagaimana cara mengubah nilai state, kemudian pada tahap
ini, Anda akan membutuhkan cara mengakses state, hampir mirip dengan props,
berikut caranya.
componentDidMount() {
this.setState({
name: "Asrul H",
});
}
render() {
return <div>Wellcome {this.state.name}</div>;
}
}
npm i react-router-dom
Setelah diinstall kita ubah file App.js agar mengeload file yang akan kita buat dengan
nama RoterApp.js , dan tambahkan file pages/Home.js untuk halaman home dan
pages/About.js untuk halaman about, sehingga kodenya seperti berikut.
File App.js
function App() {
return <RouterApp />;
}
File RouterApp.js
<main>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/about" exact component={About} />
</Switch>
</main>
</Fragment>
</BrowserRouter>
);
}
}
File page/Home.js
File page/About.js
* {
margin: 0;
padding: 0;
text-decoration: none;
list-style: none;
}
body {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100vh;
}
body nav {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: end;
-ms-flex-pack: end;
justify-content: flex-end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background: green;
width: 100%;
height: 40px;
}
body nav li a {
color: white;
}
body main {
padding: 3rem;
color: gray;
}
npm i redux
npm i react-redux
npm i redux-thunk
npm i axios
Reducer
Reducer adalah function yang digunakan untuk mengubah data state sesuai dengan
action yang diterima yang akan dicek menggunakan switch case atau if else
(kebanyakan menggunakan switch case).
const initialState = {
data: [],
isError: false,
isLoading: false,
};
Action
Action berfungsi sebagai control apasaja yang akan dilakukan oleh reducer untuk
mengubah data. Buatlah file user.action.js dalam folder actions , yang isinya seperti
berikut.
File user.action.js
Store
Store adalah kumpulan reducer yang dijadikan sebagai induk data untuk dibagikan
kesemua component dengan provider. Buatlah file store.js didalam folder helpers
yang isinya berikut.
Provider
Provider adalah function dari react-redux sebagai penyedia store yang bisa diakses
semua component. Ubah file App.js menjadi seperti berikut.
function App() {
return (
<Provider store={Store}>
<RouterApp />
</Provider>
);
}
React Hooks
Sejak react versi 16.8, hooks diperkenalkan sehingga component dengan function
memiliki akses ke state dan lifecycle secara sederhananya.
useState
useStateadalah cara menggunakan state pada react hooks, cara penggunaannya sangat
simple dengan mendeklarasikan array untuk menyimpan data dan untuk pengubahnya.
useRef
Hooks useRef digunakan untuk membuat pointer atau referensi terhadap elemen DOM.
Cara penggunaannya.
return (
<div>
<label>Input:</label>
<input type="text" ref={inputRef} placeholder="Asrul Dev" />
<button
onClick={() => {
const element = inputRef.current;
element.focus();
}}
>
Fokuskan!
</button>
</div>
);
};
useEffect(() => {
console.log("Mounted Yah:)");
}, []);
useEffect(() => {
console.log("Mounted Yah:)");
return () => {
console.log("Will UnMount Yah :(");
};
}, []);
useEffect(() => {
console.log("Mounted Yah:)");
}, [props.nilaiAwal]);
useEffect(() => {
console.log("Hitung terapdet");
}, [hitung]);
Konsum Redux
Sebelumnya kita telah membahas redux. Sempat terhenti karena ada materi penting
yang harus dipahami sebelum konsum redux, yaitu Hooks pada react. Sekarang setelah
kita bahas tentang Hooks, maka materi ini barulah bisa lanjut kembali.
Pada file pages/Home.js konsums redux dengan mengubah kode menjadi seperti berikut.
useEffect(() => {
dispatch(getUsers());
}, []);
Kemudia poles sedikt dengan mengubah css agar tampilan lebih menarik, sehingga file
App.css menjadi seperti berikut.
* {
margin: 0;
padding: 0;
text-decoration: none;
list-style: none;
}
body {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100vh;
}
body nav li {
margin-right: 2rem;
}
body nav li a {
color: white;
}
body main {
padding: 3rem;
color: gray;
}
.page {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.page .page-title {
color: black;
text-align: center;
margin-bottom: 1rem;
}
.page .users {
Pada kasus ini kita akan menggunakan contoh pada halaman register. Buat file
page/Register.js , yang isinya seperti berikut.
File page/Register.js
return (
<div className="page">
<h1 className="page-title">Register 30 Hari Js</h1>
<label>Label</label>
<input
type="text"
autoComplete={"false"}
placeholder="Label"
onChange={(e) => {
updateUser({ ...user, label: e.target.value });
}}
/>
<label>Link Profile</label>
<input
type="text"
autoComplete={"false"}
placeholder="ex. <http://fb.com/image.png>"
onChange={(e) => {
updateUser({ ...user, picture: e.target.value });
}}
/>
<label>Email</label>
<input
type="email"
autoComplete={"false"}
placeholder="email"
onChange={(e) => {
updateUser({ ...user, email: e.target.value });
}}
/>
<label>No Hp</label>
<input
type="text"
autoComplete={"false"}
placeholder="Phone"
onChange={(e) => {
updateUser({ ...user, phone: e.target.value });
}}
/>
<label>Website</label>
<input
type="text"
autoComplete={"false"}
placeholder="Link web"
onChange={(e) => {
updateUser({ ...user, website: e.target.value });
<label>Summary</label>
<textarea
rows="5"
autoComplete={"false"}
placeholder="summary..."
onChange={(e) => {
updateUser({ ...user, summary: e.target.value });
}}
></textarea>
<label>Password</label>
<input
type="password"
autoComplete={"false"}
placeholder="rahasia"
onChange={(e) => {
updateUser({ ...user, password: e.target.value });
}}
/>
<main>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/about" exact component={About} />
<Route path="/register" exact component={Register} />
</Switch>
</main>
</Fragment>
</BrowserRouter>
);
}
}
Latihan
1. Latihan untuk kesegaran otak "Berapa Banyak Hadiah yang terbeli?"
Asrul Harahap meminta Anis Fikriyyah untuk membeli oleh-oleh saat pergi ke Medan,
sekarang Anis Fikriyyah ingin tahu berapa jumlah oleh-oleh PALING BANYAK yang
bisa dia beli.
Implementasikan function dibawah untuk membantu Anis Fikriyyah:
function banyakHadiah(maxBiaya, hadiah)
Parameter pertama adalah maxBiaya Anis Fikriyyah, yang kedua adalah sebuah Array
yang berisi harga setiap oleh-oleh. Function ini harus mengembalikan nilai yang
mewakili jumlah maksimum oleh-oleh yang Anis Fikriyyah dapat beli.
Contoh:
Maksimum biaya: 25000
Daftar harga oleh-oleh: [20000, 5000, 10000, 6000, 4000 ]
Semua angka akan memiliki nilai >= 0, dan array tidak akan pernah kosong.
Persiapan Deploy
Setelah latihan kesegaran otak mari kita lanjut materi kembali, kita akan melakukan
deploy ke https://www.netlify.com (tau kenapa?, iya benar GRATISSSSSS).
Sedikit kita lengkapi, untuk halaman login, silahkan buat file page/Login.js yang isinya
seperti berikut.
return (
<div className="page">
<h1 className="page-title">Login 30 Hari Js</h1>
<label>Password</label>
<input
type="password"
autoComplete={"false"}
placeholder="rahasia"
onChange={(e) => {
updateUser({ ...user, password: e.target.value });
}}
/>
if (result.data.token) {
window.location.href = "/profile";
}
return result;
} catch (error) {
dispatch({
type: "GET_USER_ERROR",
});
}
};
};
const initialState = {
data: [],
isError: false,
isLoading: false,
detail: null,
};
useEffect(() => {
dispatch(profileUser());
}, []);
return (
<div className="page">
<h1 className="page-title">My Profile</h1>
<div className="profile">
<div className="avatar">
<img src={usersData.detail.picture} />
Ubah file RouterApp.js untuk mengubah menu sehingga kode menjadi seperti berikut.
componentDidMount() {
const token = window.localStorage.getItem("token");
this.setState({ token });
}
render() {
return (
<BrowserRouter>
<Fragment>
<nav>
<li>
{" "}
<main>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/about" exact component={About} />
{this.state.token !== null && (
<Route path="/profile" exact component={Profile} />
)}
Agar terlihat elegan tambahkan css pada file App.css yang isinya seperti berikut.
* {
margin: 0;
padding: 0;
text-decoration: none;
list-style: none;
}
body {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100vh;
}
body nav {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: end;
-ms-flex-pack: end;
justify-content: flex-end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background: green;
width: 100%;
height: 40px;
}
body nav li {
body nav li a {
color: white;
}
body main {
padding: 3rem;
color: gray;
}
.page {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.page .page-title {
color: black;
text-align: center;
margin-bottom: 1rem;
}
.page .users {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.page .register,
.page .login {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-width: 80%;
margin: auto;
}
.page .profile {
width: 800px;
min-width: 800px;
max-width: 800px;
padding: 2rem;
border: 1px dotted black;
margin: auto;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
Deploy
Pertama sekali, silahkan login ke netlify atau jika belum memiliki akun silahkan daftar
terlebih dahulu.
Node Js
React Native karena berbasis javascript maka harus adanya Node Js, untuk install node
js telah kita bahas pada 30 hari javascript hari pertama. Silahkan baca kembali.
echo $JAVA_HOME
Android Studio
Android studio adalah optional untuk diinstall, boleh hanya install Android SDK saja,
tapi untuk mempermudah mendapatkan yang kita butuhkan untuk react native.
Android SDK
Pastikan untuk mengkonfigurasi env pada laptop anda, linux atau mac biasanya pada
.bashrc atau zshrc .
echo $ANDROID_HOME
Pada series ini, kita akan membuat aplikasi minibioapp . Caranya langsung saja.
.
├── android
├── ios
├── node_modules
├── App.js
├── app.json
├── babel.config.js
├── index.js
├── metro.config.js
├── package.json
├── package-lock.json
└── __tests__
└── App-test.js
Hello World!
Ini adalah tradisi yang turun temurun, saat pertamakali belajar hal baru dalam koding
biasanya dengan menampilkan Hello World! jadi Hello Asrul Dev. Langsung saja mari
tulis kode berikut pada file App.js .
Terlihat jelas pada kode diatas, jika pada web kita menggunakan
<div> maka pada react native kita menggunakan <View>, begitu
juga penggunaan <p>, <h1>, ... atau <span> menjadi <Text> pada
react native.
Style
Desain yang bagus bisa menjadi daya tarik untuk menggunakan aplikasi, maka materi
ini saya anggap penting. Style pada react native mirip dengan css pada web tapi dalam
bentuk kode object javascript.
React native telah menyediakan StyleSheet yang dapat kita gunakan untuk kumpulan
style kode yang dimiliki. Sebelumnya terlihat bahwa saya telah memperlihatkan style
Layout
Pada react native, layout menggunakan konsep flex yang dapat dibaca disini
Text Input
Jika pada html ada <input type="text" /> maka gantinya pada react native adalah
<TextInput /> . Perhatikan contoh berikut.
<TextInput
<TextInput
style={styles.inputHope}
placeholder="Tulis apapun"
onChangeText={(text) => updateTeks(text)}
value={teks}
/>
<View style={styles.fullButton}>
<TextInput
style={styles.inputHope}
placeholder="Tulis apapun"
onChangeText={(text) => updateTeks(text)}
value={teks}
<View style={styles.AllCenter}>
<Image
source={{
uri: "<https://avatars2.githubusercontent.com/u/15111402?s=460&v=4>",
width: 200,
height: 200,
}}
style={{ marginTop: 8 }}
/>
<Image
source={{
uri: "<https://avatars2.githubusercontent.com/u/38931702?s=460&v=4>",
width: 200,
height: 200,
}}
style={{ marginTop: 8 }}
/>
<Image
source={{
uri: "<https://avatars0.githubusercontent.com/u/51555828?s=460&v=4>",
width: 200,
height: 200,
}}
style={{ marginTop: 8 }}
/>
<Image
source={{
uri: "<https://avatars1.githubusercontent.com/u/44023987?s=460&v=4>",
width: 200,
height: 200,
}}
style={{ marginTop: 8 }}
/>
</View>
</ScrollView>
);
};
Menggunakan nativebase
Sebelum menggunakan komponen nativebase, pertama sekali kita harus install pada
proyek kita dengan perintah berikut.
npm i react-router-native
Kita telah menginstall UI untuk proyek react native, kemudian kita akan membuat file
RouterApp.js , pages/Home.js , dan pages/About.js dan mengubah file App.js .
File App.js
File pages/Home.js
File pages/About.js
Icon
Icon akan sangat membantu memperjelas maksud dari sebuah aplikasi, misal gambar
rumah untuk menyatakan home. Sehingga dengan cepat pengguna tau maksud dari
fitur atau menu yang terdapat pada aplikasi.
Install library icon dengan perintah berikut.
npm i react-native-vector-icons
Redux
Pada materi react js, kita telah membahas REDUX, materi ini tidak berbeda pada react
native maupun react js, untuk itu silahkan baca kembali materi sebelumnya dan
sesuaika pada react native.
Baca series redux sebelumnya disini
Setelah disesuaikan dengan materi redux, ubah file pages/Home.js menjadi seperti
berikut.
useEffect(() => {
dispatch(getUsers());
}, []);
return (
<Container>
<Header>
<Body>
<Title>Home</Title>
</Body>
</Header>
<Content>
{usersData.isLoading && <Spinner color="blue" />}
Login
Langsung saja, tambahkan file pages/Login.js yang isinya berikut.
return (
<Container>
<Header>
<Body>
<Title>Login</Title>
</Body>
</Header>
<Content style={{ padding: 16 }}>
<Right>
<Text style={{ fontSize: 32 }}>Login 30 Hari Js</Text>
</Right>
<Form>
<Item floatingLabel>
<Label>Email</Label>
<Input onChangeText={(text) => updateEmail(text)} value={email} />
</Item>
<Item floatingLabel last>
<Label>Password</Label>
<Input
secureTextEntry={true}
onChangeText={(text) => updatePassword(text)}
value={password}
/>
</Item>
return (
<NativeRouter>
<Container>
{!auth.isLogin ? (
<Fragment>
<Route exact path="/" component={Login} />
</Fragment>
) : (
<Fragment>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
Logout
Ubah file pages/Home.js untuk menambahkan fitur logout sehingga menjadi seperti
berikut.
useEffect(() => {
dispatch(getUsers());
}, []);
return (
<Container>
<Header>
<Body>
<Title>Home</Title>
</Body>
<Right>
Register
Buat file pages/Register.js yang isi kodenya seperti berikut.
return (
<Container>
<Header>
<Body>
<Title>Register</Title>
</Body>
</Header>
<Content style={{ padding: 16 }}>
Besi hitam tumpul yang dipukul, bakar, pukul, bakar, asah, pukul,
bakar, asah hingga menjadi pedang yang tajam. Jika Anda ingin jadi
hebat setajam pedang yah....
Latihan
1. Buatlah halaman profile pada Aplikasi yang telah Anda buat!
Persiapan Publish
org.gradle.configureondemand=false
android.useAndroidX=true
android.enableJetifier=true
MYAPP_UPLOAD_STORE_FILE=asruldev-js.keystore
MYAPP_UPLOAD_KEY_ALIAS=asruldev-js-alias
MYAPP_UPLOAD_STORE_PASSWORD=rahasia-sekali-yah
MYAPP_UPLOAD_KEY_PASSWORD=rahasia-sekali-yah
...
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see <https://facebook.github.io/react-native/docs/signed-apk-android>.
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.
pro"
Jika configurasi selesai, selanjutnya lakukan release apk dengan perintah berikut.
./gradlew bundleRelease
Upload
Jika APK ingin dipublish ke play store agar dapat didownload oleh org banyak, maka
diperlukan akun play console sendiri, jika belum ada silahkan daftarkan jika udah ada
langsung login di https://play.google.com.
Pilih menu Buat Aplikasi dan pilih bahasa dan isi nama aplikasi.
Setelah dipload, maka lakukan cek ulang apakah semua field yang dibutuhkan google
play udah tercentang? jika sudah, pilih Buat Rilis .
Apa selanjutnya?
Setelah mempelajari tulisan ini maka Annda dapat mengetahui dimana nyaman Anda
sendiri, apakah lebih ke backend, frontend-web, atau mobile.
Tentukan pilihan Anda dan ikuti tulisan saya selanjutnya.
Paket Express
Your React
Native Speaker