Tutorial Preact dan Laravel #6 : Delete Data di Preact dengan Rest API


Tutorial Preact dan Laravel #6 : Delete Data di Preact dengan Rest API

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaimana cara membuat proses delete data di dalam Preact menggunakan Rest API. Disini konsepnya sangat mudah sekali, karena kita tinggal menambahkan 1 method saja di dalam file post index.

Langkah 1 - Membuat Proses Delete Data

Silahkan teman-teman buka file src/pages/posts/index.jsx, kemudian ubah 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();
  }, []);

  //method deletePost
  const deletePost = async (id) => {
    //delete with api
    await api.delete(`/api/posts/${id}`).then(() => {
      //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
                            onClick={() => {
                              if (window.confirm("Delete the item?")) {
                                deletePost(post.id);
                              }
                            }}
                            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 menambahkan method baru dengan nama deletePost, method tersebut memiliki parameter id.

//method deletePost
const deletePost = async (id) => {

	//...
	
}

Di dalamnya, kita melakukan fetch ke backend untuk proses delete data dengan endpoint /api/posts/:id menggunakan method DELETE.

//delete with api
await api.delete(`/api/posts/${id}`).then(() => {

	//...
	
}

Jika proses delete data berhasil dilakukan, maka kita akan memanggil method fetchDataPosts, tujuannya agar dilakukan fetch ulang dengan data yang terbaru.

//call method "fetchDataPosts"
fetchDataPosts();

Dan di dalam button DELETE, kita tinggal memanggil method di atas.

<button
  onClick={() => {
    if (window.confirm("Delete the item?")) {
      deletePost(post.id);
    }
  }}
  className="btn btn-sm btn-danger rounded-sm shadow border-0"
  >
  DELETE
</button>

Langkah 2 - Uji Coba Delete Data

Sekarang silahkan teman-teman klik button DELETE disalah satu data yang dimiliki, jika berhasil maka akan menampilkan alert seperti berikut ini.

Jika kita klik OK, maka akan melakukan proses delete data di dalam server dan kita akan mendapatkan hasil seperti berikut ini.

Kesimpulan

Pada artikel terkahir ini, kita telah belajar bagaimana cara membuat proses delete data di dalam Preact dengan Rest API.

Jika teman-teman mempunyai kendala saat belajar, jangan sungkan-sungkan untuk bertanya melalui kolom komentar dimasing-masing post, atau juga bisa melalui group Telegram dari SantriKoding.

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