Menampilkan Data Menggunakan Komponen

Kamis, 10 Oktober 2024
Menampilkan Data Menggunakan Komponen

Menampilkan Data dengan Komponen

Setelah berhasil menampilkan data menggunakan Livewire, berikutnya kita akan coba pecah menjadi sebuah komponen yang lebih kecil. Contoh kasus ini adalah daftar dari bukunya kita akan pecah menjadi sebuah komponen tersendiri.

image-20241010125606290

Pertama, buat sebuah komponen Livewire baru, denga perintah :

php artisan make:livewire Book/Components/BookCard

Setelah berhasil, salin kode yang ada sebelumnya ke resources/views/livewire/book/components/book-card.blade.php

<div class="rounded-lg bg-gray-100 p-4 shadow">
    <h1 class="font-bold">{{ $book->title }}</h1>
    <p class="text-sm text-gray-500">Author : {{ $book->author }}</p>
</div>

Kemudian perbarui kode pada resources/views/livewire/book/book-list.blade.php

<div class="space-y-2">
    @foreach ($books as $book)
        <livewire:book.components.book-card />
        {{-- digunakan untuk memanggil komponen `Livewire` --}}
    @endforeach
</div>

Selanjutnya coba akses kembali halaman http://localhost:8000/books, dan lihat apa yang terjadi sekarang, DUARRR!!!

image-20241010130113417

Error !! HAHA, seperti yang ditampilkan / yang bisa kita baca, dinyatakan bahwa errornya terjadi karena variabel $book ini nggak ada. Untuk mengatasinya buatlah agar komponennya bisa menerima variabel dengan menambahkan kode berikut ke app/Livewire/Book/Components/BookCard.php .

<?php

namespace App\Livewire\Book\Components;

use App\Models\Book;
use Livewire\Component;

class BookCard extends Component
{
  public Book $book;

    public function render()
    {
        return view('livewire.book.components.book-card');
    }
}

Setelah itu, jika dicek lagi halamannya, ternyata masih ada error lagi, tapi berbeda, kali ini propertinya yang tidak bisa dibaca atau disebabkan datanya kosong.

image-20241010131131014

Nah, agar variabel atau properti $book ini punya nilai, maka pada file resources/views/livewire/book/book-list.blade.php harus mengirimkan variabel $book dengan cara :book=$book.

<div class="space-y-2">
    @foreach ($books as $book)
        <livewire:book.components.book-card :book=$book />
        {{-- digunakan untuk memanggil komponen `Livewire` --}}
    @endforeach
</div>

Akhirnya, ketika kita coba buka halamannya lagi, kita sudah menemukan tampilan yang sama seperti sebelumnya, dengan tambahan kita sudah belajar tentang komponen dan cara mengirimkan variabel ke komponen lainnya di Livewire.

Selanjutnya, kita akan pelajari bagaimana menambahkan data tanpa reload dengan Livewire.

Belum ada komentar di sini