livewire-4
Livewire 4
Build dynamic, reactive interfaces with PHP — no JavaScript required.
Component Formats
Single-file (default, recommended)
<?php // resources/views/components/⚡todos.blade.php
use Livewire\Component;
new class extends Component {
public $todos = [];
public $todo = '';
public function add()
{
$this->todos[] = $this->todo;
$this->reset('todo');
}
};
?>
<div>
<input type="text" wire:model="todo">
<button wire:click="add">Add</button>
@foreach ($todos as $item)
<li wire:key="{{ $loop->index }}">{{ $item }}</li>
@endforeach
</div>
Multi-file (for complex components)
php artisan make:livewire post.create --mfc
Creates: resources/views/components/post/⚡create/ with separate .php, .blade.php, .js, .css files.
Page components
php artisan make:livewire pages::post.create
Route with: Route::livewire('/posts/create', 'pages::post.create');
Core Patterns
Properties
- Public properties auto-available in Blade
- Use
$this->reset('prop')to reset - Use
$this->fill([...])for bulk assignment - Protected properties hidden from client (not persisted)
Data Binding
<input wire:model="title"> <!-- Syncs on action -->
<input wire:model.live="search"> <!-- Syncs on input -->
<input wire:model.blur="email"> <!-- Syncs on blur -->
Actions
<button wire:click="save">Save</button>
<button wire:click="delete({{ $id }})">Delete</button>
<form wire:submit="store">...</form>
Computed Properties
use Livewire\Attributes\Computed;
#[Computed]
public function posts()
{
return Post::latest()->get();
}
Access in Blade: $this->posts
Event Modifiers
wire:click.prevent- preventDefaultwire:keydown.enter- specific keywire:click.debounce.500ms- debouncewire:submit.throttle- throttle
Loading States
<button wire:click="save" class="data-loading:opacity-50">
Save
</button>
<span class="not-data-loading:hidden">Saving...</span>
Confirmation
<button wire:click="delete" wire:confirm="Are you sure?">Delete</button>
Security
Always validate and authorize — public properties can be manipulated client-side.
public function delete(Post $post)
{
$this->authorize('delete', $post);
$post->delete();
}
Detailed References
Load these as needed:
- Components deep dive: See
references/components.md - Properties & state: See
references/properties.md - Actions & events: See
references/actions.md
More from freekmurze/dotfiles
php-guidelines-from-spatie
Describes PHP and Laravel guidelines provided by Spatie. These rules result in more maintainable, and readable code.
144context7-auto-research
Automatically fetches up-to-date documentation from Context7 when users ask about libraries, frameworks, APIs, or need code examples. Triggers proactively without explicit user request.
27react-native-best-practices
Provides React Native performance optimization guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Applies to tasks involving Hermes optimization, JS thread blocking, bridge overhead, FlashList, native modules, or debugging jank and frame drops.
24agent-browser
Automates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with web pages, fill forms, take screenshots, test web applications, or extract information from web pages.
24copy-editing
When the user wants to edit, review, or improve existing marketing copy. Also use when the user mentions 'edit this copy,' 'review my copy,' 'copy feedback,' 'proofread,' 'polish this,' 'make this better,' or 'copy sweep.' This skill provides a systematic approach to editing marketing copy through multiple focused passes.
24fix-github-issue
Fix GitHub issues using gh CLI. Use when asked to fix, resolve, or address a GitHub issue. Creates fixes on separate branches, runs tests locally, and creates PRs when tests pass. Requires gh CLI authenticated and repo cloned locally.
22