Kurnia Andi Nugroho
0 comment
Kalau kita tarik ke konsep paling dasarnya, Livewire component itu sebenarnya cuma dua hal:
PHP class yang bisa langsung “ngobrol” sama Blade
Dan kombinasi ini yang bikin Livewire unik.
Kita bisa bikin UI interaktif full-stack:
Cukup PHP + Blade + sedikit directive.
Di tutorial ini, kita akan bahas:
Pelan-pelan, satu konsep sekali jalan.
Cara paling standar bikin component adalah lewat Artisan:
php artisan make:livewire post.create
Di Livewire 4, default-nya adalah single-file component, dan file-nya akan muncul di:
resources/views/components/post/⚡create.blade.php
Isinya kira-kira seperti ini:
<?php
use Livewire\Component;
new class extends Component {
public $title = '';
public function save()
{
// logic simpan data
}
};
?>
<div>
<input wire:model="title" type="text">
<button wire:click="save">Save Post</button>
</div>
Catatan penting Dalam satu file ini:
<style> dan <script>Ini bikin semua yang berhubungan dengan satu komponen ngumpul di satu tempat.
Pertanyaan klasik
Jawabannya sederhana tapi kepake banget:
Dan tenang… Kalau kamu tim “serius enterprise tanpa emoji”, bisa dimatikan:
// config/livewire.php
'make_command' => [
'emoji' => false,
],
Livewire 4 membedakan:
Untuk halaman, gunakan namespace pages:::
php artisan make:livewire pages::post.create
Hasilnya:
resources/views/pages/post/⚡create.blade.php
Kenapa ini bagus?
Dan page component ini nanti bisa langsung dipakai di routing.
Single-file itu enak… sampai komponenmu:
Di situ multi-file component (MFC) jadi penyelamat.
Bikinnya:
php artisan make:livewire post.create --mfc
Strukturnya:
resources/views/components/post/⚡create/
├── create.php
├── create.blade.php
├── create.js
├── create.css
├── create.global.css
└── create.test.php
Semua masih satu folder Tapi lebih ramah IDE Lebih nyaman buat tim besar
Livewire 4 punya command sakti:
php artisan livewire:convert post.create
Atau eksplisit:
php artisan livewire:convert post.create --mfc
php artisan livewire:convert post.create --sfc
Bisa bolak-balik Nggak perlu bikin ulang Aman buat refactor
Ringkasnya:
Cara render paling dasar:
<livewire:component-name />
Kalau ada subfolder:
<livewire:post.create />
Kalau pakai namespace:
<livewire:pages::post.create />
Ingat: folder → pakai titik (.) namespace → pakai ::
Static value:
<livewire:post.create title="Judul Awal" />
Dynamic value:
<livewire:post.create :title="$initialTitle" />
Di component:
public $title;
public function mount($title = null)
{
$this->title = $title;
}
Atau versi ringkas (tanpa mount()):
public $title;
Livewire akan auto-set.
Catatan penting (sering bikin bingung) Props tidak reactive secara default. Kalau nilai di parent berubah setelah page load, child tidak ikut update.
Ini bukan bug — ini desain.
Kalau component dipakai sebagai halaman:
Route::livewire('/posts/{id}', 'pages::post.show');
public function mount($id)
{
$this->postId = $id;
}
Lebih cakep lagi, pakai route model binding:
Route::livewire('/posts/{post}', 'pages::post.show');
public Post $post;
Tanpa mount(). Bersih.
Ini salah satu kekuatan terbesar Livewire.
Route::livewire('/posts/create', 'pages::post.create');
Tidak ada controller. Tidak ada method index/store.
Logic → component View → component State → component
Tetap bisa:
public $title = 'My Post';
<h1>{{ $title }}</h1>
protected $apiKey = 'secret';
Akses via:
{{ $this->apiKey }}
Tidak dikirim ke frontend Cocok buat data sensitif
use Livewire\Attributes\Computed;
#[Computed]
public function posts()
{
return Post::latest()->get();
}
@foreach ($this->posts as $post)
{{ $post->title }}
@endforeach
Query di-cache per request Cocok untuk data berat Kombinasi maut dengan Islands
public function render()
{
return $this->view([
'author' => auth()->user(),
'now' => now(),
]);
}
Ingat:
render()jalan setiap update Jangan taruh query berat tanpa alasan.
Default:
pages::layouts::Tambah sendiri:
// config/livewire.php
'component_namespaces' => [
'admin' => resource_path('views/admin'),
'widgets' => resource_path('views/widgets'),
],
Pakai:
php artisan make:livewire admin::users-table
<livewire:admin::users-table />
php artisan make:livewire CreatePost --class
Hasil:
app/Livewire/CreatePost.phpresources/views/livewire/create-post.blade.phpGunakan kalau:
Kalau kamu punya standar internal:
php artisan livewire:stubs
Bisa custom:
php artisan view:clearstorage/logs/laravel.logKalau boleh dirangkum:
Livewire 4 bikin component lebih dekat ke cara manusia mikir, bukan cuma ke cara framework bekerja.
Kurnia Andi Nugroho
Web & Mobile App Developer, Laravel, Inertia, Vue.Js, React.Js
Founder of Lagikoding.com Laravel Enthusiast & Web Developer