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


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

Halo teman-teman semuanya, pada artikel sebelum-sebelumnya kita telah berhasil menampilkan data, proses insert, edit dan update di Solid Js. Dan pada artikel kali ini, kita semua akan belajar bagaimana cara membuat proses delete data dari database di Solid Js menggunakan Rest API.

Langkah 1 - Menambahkan Method Delete Data

Disini kita cukup menambahkan sebuah method saja di dalam file posts index, method ini nantinya akan dijalankan ketika button delete diklik.

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 createSignal dan createEffect
import { createSignal, createEffect } from "solid-js";

//import from @solidjs/router
import { A } from "@solidjs/router";

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

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

  //define method "fetchDataPosts"
  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 createEffect
  createEffect(() => {
    //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="row mt-5">
      <div className="col-md-12">
        <div className="card border-0 shadow rounded">
          <div className="card-body">
            <A
              href="/posts/create"
              className="btn btn-md btn-success rounded shadow border-0 mb-2"
            >
              ADD POST
            </A>
            <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">
                        <a
                          href={`/posts/edit/${post.id}`}
                          className="btn btn-sm btn-primary rounded-sm shadow border-0 me-2"
                        >
                          EDIT
                        </a>
                        <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>
  );
}

Dari perubahan kode di atas, pertama kita menambahkan method baru dengan nama deletePost. Di dalam method tersebut kita berikan parameter berupa ID dari data post yang akan dihapus.

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

	//...
	
}

Di dalam method tersebut, kita melakukan delete data ke dalam backend / Laravel menggunakan Rest API dengan endpoint /api/posts/:id dan http method yang digunakan adalah DELETE.

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

	//...
	
}

Jika proses delete data berhasil dilakukan, maka kita panggil method fetchDataPosts, tujuannya agar data posts dilakukan fetching ulang ke backend.

//call method "fetchDataPosts"
fetchDataPosts();

Dan di dalam button, kita cukup menambahkan event onClick yang isinya kita arahkan ke dalam method di atas, yaitu deletePost.

<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 konfirmasi seperti berikut ini.

Jika teman-teman klik OK, maka data akan dihapus di dalam database.

Kesimpulan

Pada artikel ini kita telah belajar bagaimana cara membuat proses delete data di Solid Js menggunakan Rest API dengan cara menambahkan sebuah method baru pada halaman posts index.

Jika teman-teman sat belajar mengalami kendala ata error, maka jangan sungkan-sungkan untuk bertanya melalui kolom komentar ata bisa juga melalui group Telegram dari SantriKoding.

SOURCE CODE : https://github.com/SantriKoding-com/Solid-Js-CRUD

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