Tutorial Preact dan Laravel #3 : Menampilkan Data di Preact dari Rest API


Tutorial Preact dan Laravel #3 : Menampilkan Data di Preact dari Rest API

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaimana cara menampilkan data di dalam Preact dari Rest API.

MOHON DIBACA !


Pastikan teman-teman sudah menjalankan project Laravel-nya terlebih dahulu, agar Rest API bisa digunakan di dalam Preact.

Langkah 1 - Installasi Axios

Pertama, kita akan menginstall library yang nanti digunakan untuk melakukan Http Request ke backend dan dalam hal ini adalah Axios.

Silahkan teman-teman jalankan perintah berikut ini di dalam terminal/CMD dan pastikan sudah berada di dalam project Preact-nya.

npm install axios@1.6.7

Langkah 2 - Konfigurasi Axios

Agar nanti kita menulis domain backend secara berulang-ulang di dalam component, maka kita perlu membuat service endpoint API-nya secara global.

Sekarang, silahkan teman-teman buat folder baru dengan nama services di dalam folder src, dan di dalam folder services tersebut silahkan buat file baru dengan nama api.js dan masukkan kode berikut ini di dalamnya.

src/services/api.js

//import axios
import axios from 'axios';

const Api = axios.create({
    //set default endpoint API
    baseURL: 'http://localhost:8000'
})

export default Api

Langkah 3 - Menampilkan Data dari Rest API di Preact

Selanjutnya, kita akan belajar bagaimana cara menampilkan data dari Rest API di dalam Preact. Disini kita akan mengubah kode yang berada di dalam view post index.

Silahkan teman-teman buka file src/pages/posts/index.jsx, kemudian ubah semua kode-nya menjadi seperti berikut ini.

src/pages/posts/index.jsx

//import useState dan useEffect
import { useState, useEffect } from "preact/hooks";

//import api
import api from "../../services/api";

//import Link
import { Link } from "preact-router/match";

export default function PostIndex() {
  //init state
  const [posts, setPosts] = useState([]);

  //define method
  const fetchDataPosts = async () => {
    //fetch data from API with Axios
    await api.get("/api/posts").then((response) => {
      //assign response data to state "posts"
      setPosts(response.data.data.data);
    });
  };

  //run hook useEffect
  useEffect(() => {
    //call method "fetchDataPosts"
    fetchDataPosts();
  }, []);

  return (
    <div className="container mt-5 mb-5">
      <div className="row">
        <div className="col-md-12">
          <Link
            href="/posts/create"
            className="btn btn-md btn-success rounded shadow border-0 mb-3"
          >
            ADD NEW POST
          </Link>
          <div className="card border-0 rounded shadow">
            <div className="card-body">
              <table className="table table-bordered">
                <thead className="bg-dark text-white">
                  <tr>
                    <th scope="col">Image</th>
                    <th scope="col">Title</th>
                    <th scope="col">Content</th>
                    <th scope="col" style={{ width: "15%" }}>
                      Actions
                    </th>
                  </tr>
                </thead>
                <tbody>
                  {posts.length > 0 ? (
                    posts.map((post, index) => (
                      <tr key={index}>
                        <td className="text-center">
                          <img
                            src={post.image}
                            alt={post.title}
                            width="200"
                            className="rounded"
                          />
                        </td>
                        <td>{post.title}</td>
                        <td>{post.content}</td>
                        <td className="text-center">
                          <Link
                            href={`/posts/edit/${post.id}`}
                            className="btn btn-sm btn-primary rounded-sm shadow border-0 me-2"
                          >
                            EDIT
                          </Link>
                          <button className="btn btn-sm btn-danger rounded-sm shadow border-0">
                            DELETE
                          </button>
                        </td>
                      </tr>
                    ))
                  ) : (
                    <tr>
                      <td colSpan="4" className="text-center">
                        <div className="alert alert-danger mb-0">
                          Data Belum Tersedia!
                        </div>
                      </td>
                    </tr>
                  )}
                </tbody>
              </table>
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}

Dari perubahan kode di atas, pertama kita import hook useState dan useEffect dari Preact Hooks.

//import useState dan useEffect
import { useState, useEffect } from "preact/hooks";

Kemudian kita import services API yang sudah kita buat sebelumnya.

//import api
import api from "../../services/api";

Karena akan ada sebuah navigasi di dalam halaman ini, maka kita import Link dari Preact Router.

//import Link
import { Link } from "preact-router/match";

Di dalam function component PostIndex kita membuat state baru, dimana state inilah yang nanti akan menampung data yang di dapatkan dari Rest API.

//init state
const [posts, setPosts] = useState([]);

Setelah itu, kita buat method baru dengan nama fetchDataPosts.

//define method
const fetchDataPosts = async () => {

	//...
	
}

Di dalam method tersebut, kita melakukan fetch data ke backend melalui Rest API dengan endpoint /api/posts dan method yang digunakan adalah GET.

await api.get("/api/posts").then((response) => {

	//...
	
}

Jika proses fetching berhasil dilakukan, kita akan assign atau memasukkan response data dari Rest API ke dalam state posts melalui state handler-nya, yaitu setPosts.

//assign response data to state "posts"
setPosts(response.data.data.data);

Agar method di atas dijalankan saat halaman diakses, maka kita perlu memanggilnya di dalam hook useEffect.

//run hook useEffect
useEffect(() => {
  //call method "fetchDataPosts"
  fetchDataPosts();
}, []);

Untuk menampilkan data di dalam template, kita membuat kondisi terlebih dahulu. Jika data posts lebih dari 0, maka kita akan tampilkan data-nya dan jika 0, maka kita akan tampilkan pesan data belum tersedia.

{posts.length > 0 ? (

	// tampilkan data

) : (

	// Data Belum Tersedia!

)

Di atas, untuk menampilkan data kita menggunakan method map.

posts.map((post, index) => (

	//...
	
))

Langkah 4 - Uji Coba Menampilkan Data

Sekarang silahkan teman-teman klik kemu POSTS yang ada di dalam navbar, atau juga bisa langsung ke URL berikut ini http://localhost:5173/posts, jika berhasil maka akan menampilkan halaman seperti berikut ini.

Di atas, kita masih menampilkan pesan Data Belum Tersedia!, karena memang kita masih belum memiliki data apapun di dalam database.

Kesimpulan

Pada artikel ini kita telah banyak belajar, seperti menginstall dan konfigurasi Axios, menampilkan data dari Rest API di Preact dan melakukan uji coba.

Pada artikel berikutnya, kita semua akan belajar bagaimana cara melakukan proses insert dan upload data di dalam Preact melalui Rest API.

Terima Kasih



Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami