Table of Content
- Introduction
- Installation
- Create Component Based
- Class-based Volt components
- Full-page components
- API Style
- Properties
- Mount
- Computed Property
Introduction
Dari laman resmi nya kita diberitahu bahwa Kita harus benar-benar paham livewire dulu. “Sebelum menggunakan Volt, kami sarankan untuk memahami penggunaan Livewire standar berbasis kelas. Ini akan memungkinkan Anda dengan cepat mentransfer pengetahuan Anda tentang Livewire ke dalam komponen penulisan menggunakan API fungsional Volt.”
Volt adalah functional API yang dibuat untuk Livewire yang mendukung single file component (logika dan tampilan dijadikan satu).
Installation
Ketik perintah ini untuk install :
composer require livewire/voltSelanjutnya ketik perintah :
php artisan volt:installCreate Component Based
Buat komponen class
php artisan make:volt counter --classNote : jangan lupa gunakan --class
Hasilnya akan seperti ini :
<?php
use Livewire\Volt\Component;
new class extends Component {
//
}; ?>
<div>
//
</div>Class-based Volt components
Kita bisa menggunakan class ketika ingin menggunakan single-file component Volt. Untuk memulai, tentukan class anonim yang extends ke Livewire\\\\Volt\\\\Component.
Di dalam kelas, Anda dapat memanfaatkan semua fitur Livewire menggunakan sintaksis Livewire tradisional:
<?php
use Livewire\Volt\Component;
new class extends Component {
public $count = 0;
public function increment(){
$this->count++;
}
}
?>
<div>
<h1>{{ $count }}</h1>
<button wire:click="increment">+</button>
</div>Class Attributes
Sama seperti komponen Livewire pada umumnya, komponen Volt mendukung atribut class. Saat menggunakan kelas PHP anonim, atribut kelas harus ditentukan setelah new:
<?php
use Livewire\Attributes\{Layout, Title};
use Livewire\Volt\Component;
new
#[Layout('layouts.guest')]
#[Title('Login')]
class extends Component{
// ...
}
?>Providing additional view data
Saat menggunakan component class based, tampilan yang dirender adalah templat yang ada dalam file yang sama. Jika perlu meneruskan data tambahan ke tampilan setiap kali dirender, kita dapat menggunakan metode with. Data ini akan diteruskan ke tampilan selain properti publik komponen:
Contoh studi kasus nya :
<?php
use Livewire\Volt\Component;
use Livewire\Attributes\{Layout, Title};
use Livewire\WithPagination;
use App\Models\Portfolio;
new
#[Layout('components.layouts.app')]
#[Title('Portfolio')]
class extends Component{
use WithPagination;
public $search;
public function with()
{
$portfolios = Portfolio::orderByDesc('created_at')->paginate(5);
$result = Portfolio::where('title', 'like','%'.$this->search.'%')->orderByDesc('created_at')->paginate(5);
return [
'portfolios' => $this->search ? $result : $portfolios
];
}
}
?>Kode diatas contoh kita show data dan searching + paginate.
Full-page components
Kita bisa menggunakan full component dan mendefinisikan di route/web.php :
use Livewire\Volt\Volt;
Volt::route('/users', 'user-index');API Style
Dengan memanfaatkan API fungsionalitas, kita bisa mendefinisikan logika komponen livewire melalui use function Livewire\Volt. Contohnya :
<?php
use function Livewire\Volt\{state, layout};
layout('layouts.latihan');
state(['count' => 0]);
$increment = fn() => $this->count++;
?>
<div class="container mt-5">
<div class="row">
<div class="col-4 mx-auto">
<p>
{{ $count }}
</p>
<button class="btn btn-primary" wire:click="increment">Add Score</button>
</div>
</div>
</div>Properties
Properti Volt, seperti properti Livewire, dapat diakses dengan mudah di blade. Kita dapat mendefinisikan properti menggunakan fungsi state:
<?php
use function Livewire\Volt\{state};
state(['count' => 0]);
?>
<div>
{{ $count }}
</div>Mount
Kita bisa menggunakan function mount() Note : jangan lupa load use function Livewire\Volt\{mount}
<?php
use function Livewire\Volt\{state, layout, mount};
layout('layouts.latihan');
state('nama');
mount(function(){
$this->nama = 'Andaru';
});
?>Computed Property
Livewire juga memungkinkan kita menentukan properti computed(), yang dapat berguna untuk fetch data dengan lazy load.
$count = computed(function () {
return User::count();
});- List
- Action
- Validation
- File Uploads
- URL Query Parameters (searching)
- Pagination
Date : 12-03-2024