Apa saja yang akan dibahas?
Pertemuan sebelumnya sudah belajar Redux Toolkit nih
Middleware = Middle (Tengah), Ware (Sesuatu)
Sesuatu yang diselipkan di tengah-tengah
Redux Middleware ?
Sesuatu yang diselipkan di tengah tengah (alur logika) Redux
Mari kita coba lihat untuk alur kerja Redux dengan Middleware
Lalu sekarang pertanyaannya, untuk apa kita butuh Middleware ini?
Untuk apa kita butuh Middleware?
Katanya untuk menarik data dari API kan? Kenapa kita menggunakan Reducer saja secara langsung?
Salah tiga dari Middleware untuk Redux yang cukup terkenal mungkin adalah Thunk, Saga, Obseverable
Middleware ini akan menjadi penengah antara extension pihak ketiga (third-party extension) untuk dispatch action dan ketika Middleware ini sampai ke reducer.
Dalam real casenya, Middleware ini sering digunakan sebagai:
Duh, ketika melihat kayak ini, apakah kita akan belajar ketiga-tiganya di hari ini?
Tentu saja tydaque, karena kita hanya akan fokus terhadap satu saja: Thunk
Tapi... tahukah Anda, ada hal yang menarik loh mengenai Thunk ini.
Thunk sudah di-include-kan ketika kita menggunakan configureStore yang ada di Redux Toolkit !
Jadi tanpa bersusah payah lagi, mari kita gunakan ... Redux Toolkit dan belajar tentang Thunk !
Jadi kita akan langsung belajar menggunakan Redux Toolkit untuk bisa melakukan fetch data dari luar yah !
(Walaupun katanya reducer tidak bisa mengambil data dari luar, tapi dengan Redux Toolkit yang sudah menyediakan Thunk di balik layar, kita bisa membuat "middleware" yang akan bertindak "seolah" seperti reducer yang kita buat sebelumnya loh !)
Misalnya dalam pembelajaran ini kita akan menggunakan kode kita pada pertemuan sebelumnya untuk mengambil data dari luar (https://reqres.in/api/users/:id)
Bagaimanakah cara kita melakukannya?
Langkah-langkahnya adalah sebagai berikut:
(Kelihatannya langkah nya sedikit, namun sebenarnya yang ditulis cukup banyak yah !)
Untuk melihat kode akhir yang dituliskan pada pembelajaran ini, dapat dilihat di sini yah
Bagaimana setelah melihat kodenya tadi?
Cukup banyak yah otomasi yang terjadi di balik layarnya?
Ingat baik baik bahwa RTK ini adalah sesuatu yang opinionated, sehingga banyak otomasi dan ruleset yang harus diikuti yah !
(Tapi sebenarnya itu sangat memudahkan kita sekali ketimbang harus menggunakan semuanya secara manual loh ...)
Yuk kita mencoba untuk memodifikasi kodenya sedikit lagi sehingga bisa menerima data dari userId yang berbeda-beda
Langkah yang harus dilakukan adalah sebagai berikut:
Apabila tertinggal, untuk kode lengkapnya dapat dilihat di sini yah
Wah, kode Part 2 ini perubahannya sedikit yah !
Ya, sedikit, karena logic untuk meng-fetch datanya sudah kita buat pada slice dengan sebaik-baiknya, sehingga perubahan kode pada Component menjadi sangat minimal
Ini juga menjadi dasar dari penggunaan Redux (baik RTK maupun murni Redux): Globalisasi / Sentralisasi Fitur !
Walaupun apabila kita tidak menggunakan RTK kode yang dibuat akan menjadi lebih ... banyak boilerplatenya
Tapi dari kode yang kita buat sebelumnya dengan RTK itu masih ada suatu kebimbangan hati:
Apabila kita ingin menggunakan banyak tarikan data dari satu API yang sama (misal sama sama dari https://reqres.in/api, tapi ingin GET POST PUT PATCH DELETE), bagaimanakah cara kita mengelompokan-nya?
Please welcome salah satu solusi yang dihadirkan di dalam RTK: Redux Toolkit Query (RTK Query)
Dokumentasi RTK Query bisa kita lihat di sini yah
Dilihat dari Dokumentasi, RTK Query ini adalah:
Yuk kita langsung demo lagi
Pada demo kali ini kita akan menggunakan data yang disediakan dari https://reqres.in/api/colors
Kita akan memetakan seluruh HTTP Method yang ada pada API tersebut ke dalam RTK Query yang kita buat yah !
{
"page": 1,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
{
"id": 1,
"name": "cerulean",
"year": 2000,
"color": "#98B2D1",
"pantone_value": "15-4020"
},
...
]
}
Available Endpoints for https://reqres.in/api/colors:
Untuk mempermudah testing yang kita miliki, sudah disediakan juga untuk Postman Collection-nya yang dapat diunduh di sini yah
Bayangkan apabila kita harus membuat ini satu-per-satu...
6 fnThunk + 6 x 3 ExtraReducers ... = 24 Fungsi yang harus dibuat !
Mari kita coba lihat dengan menggunakan RTK Query
Dengan RTK Query kita bisa apa saja sekarang?
Langkah-langkahnya adalah sebagai berikut
Penulisan kode di atas dapat dilihat di sini yah
(WARNING): Langkah ini terlihat sedikit, namun sebenarnya kode yang dituliskan cukup banyak yah !
Wah setelah kita ngoding tadi, sepertinya jadi JAUH lebih pendek yah ketimbang kita menggunakan createAsyncThunk secara manual?
Tapi karena ini Opinionated, ada ruleset (aturan) yang harus kita ikuti yah jadinya !
Lalu dari tadi, kita cm GET GET GET aja nih...
Bagaimana bila seandainya kita ingin memanfaatkan yang ada Mutation datanya? (POST PUT PATCH DELETE)?
Yuk kita coba ubah kode kita sedikit lagi sehingga bisa menggunakan Mutation !
Langkah-langkah untuk menggunakan Mutation adalah sebagai berikut:
WARNING: walaupun di sini terlihat langkahnya sedikit, tapi sebenarnya butuh waktu lebih untuk bisa memahami langkah dan step yang ada di sini yah !
Untuk Kode yang dituliskan dapat dilihat di sini yah
Sampai di titik ini artinya kita sudah berhasil menggunakan query dan mutation yang ada pada RTK Query
Selamat !
Tapi... apakah ini berarti kita sudah berhasil menguasai semua yang ada di RTK Query? Maka jawabannya adalah tydaque yah
Sebenarnya di dalam RTK Query ini sendiri masih banyak fitur fitur tersembunyi yang belum dibahas di sini:
Jadi ada baiknya untuk mencoba yang versi standard (yang kita pelajari) ini terlebih dahulu yah, sebelum akhirnya kita mencoba menggunakannya dalam project kita ini
Sekali lagi, Redux Toolkit ini adalah kumpulan cara penggunaan Redux yang SANGAT TEROPINI sehingga banyak ruleset yang harus diikuti
Namun di balik hal tersebut, kita akan mendapatkan banyak keringanan dalam "memutuskan" suatu cara dan fitur fitur powerful, Apabila kita dapat memanfaatkannya dengan sebaik-baiknya