# 2026'da Laravel Livewire 3: Reaktif Uygulamalar ve Mülakat Soruları
> Laravel Livewire 3 ile reaktif bileşenler, PHP 8 nitelikleri, Alpine.js entegrasyonu ve teknik mülakatlara hazırlık konularını kapsayan kapsamlı rehber.
- Published: 2026-07-17
- Updated: 2026-07-17
- Author: SharpSkill
- Reading time: 5 min
---
Laravel Livewire 3, PHP geliştiricilerinin JavaScript yazmadan reaktif, dinamik arayüzler oluşturma biçimini dönüştürüyor. Framework'ün önemli bir evrimi olarak yayınlanan Livewire 3, Alpine.js entegrasyonu, morphing ile geliştirilmiş performans ve gerçek zamanlı uygulamaların Laravel ekosisteminde doğal hissettiren daha temiz bileşen sözdizimi sunuyor.
> **Livewire 3 Temel Değişiklik**
>
> Livewire 3, dahili olarak Alpine.js kullanır ve layout'ta `@livewireStyles` ve `@livewireScripts` direktiflerini gerektirir. wire:model direktifi artık varsayılan olarak lazy binding kullanır—gerçek zamanlı güncellemeler için `wire:model.live` kullanılmalıdır.
## Livewire 3 Mimarisi ve Reaktif Bağlama
Livewire basit ama güçlü bir konsept üzerinden çalışır: sunucuda yeniden render edilen ve HTML farklarını tarayıcıya gönderen PHP bileşenleri. Her bileşen, özellik değerlerini koruyan bir serileştirme mekanizması aracılığıyla istekler arasında durumunu korur.
Mimari, JavaScript tabanlı reaktiviteden temelden farklıdır. İstemci tarafında sanal bir DOM tutmak yerine, Livewire bileşen durumunu serileştirir, her istekle birlikte gönderir ve sunucu yanıtına göre DOM'u morph eder. Bu yaklaşım, kullanıcıların beklediği reaktif deneyimi sunarken iş mantığını PHP'de tutar.
```php
// app/Livewire/SearchUsers.php
resetPage();
}
public function render()
{
return view('livewire.search-users', [
'users' => User::query()
->when($this->search, fn($q) => $q->where('name', 'like', "%{$this->search}%"))
->when($this->role, fn($q) => $q->where('role', $this->role))
->paginate(10),
]);
}
}
```
`#[Url]` niteliği, özellikleri URL sorgu parametreleriyle otomatik olarak senkronize ederek ek kod olmadan paylaşılabilir filtrelenmiş görünümler sağlar. `updatedSearch` yaşam döngüsü hook'u, search özelliği değiştiğinde tetiklenir ve sayfalamayı birinci sayfaya sıfırlar.
## PHP 8 Nitelikleri ile Livewire 3 Bileşen Sözdizimi
Livewire 3, yapılandırma için PHP 8 niteliklerini benimser ve önceki metot tabanlı yaklaşımı değiştirir. Bu deklaratif stil, okunabilirliği artırır ve bileşenler genelinde tekrarlayan kodu azaltır.
```php
// app/Livewire/CreatePost.php
userId = auth()->id();
}
#[Computed]
public function wordCount(): int
{
return str_word_count($this->content);
}
public function save(): void
{
$validated = $this->validate();
Post::create([
'user_id' => $this->userId,
...$validated,
]);
$this->reset(['title', 'content', 'tags']);
$this->dispatch('post-created');
}
public function render()
{
return view('livewire.create-post');
}
}
```
`#[Locked]` niteliği, hassas özelliklerin frontend'den manipüle edilmesini engeller—bu, ID'ler veya izinler geçirilirken güvenlik açısından kritiktir. `#[Rule]` nitelikleri inline doğrulama tanımlarken, `#[Computed]` bağımlılıklar değişene kadar pahalı hesaplamaları önbelleğe alır.
> **Güvenlik Değerlendirmesi**
>
> Kullanıcı ID'leri, izin bayrakları ve tarayıcıdan değiştirilmemesi gereken tüm veriler için her zaman `#[Locked]` kullanılmalıdır. Livewire, bileşen durumunu her istekte iletir ve korunmayan özellikleri manipülasyona açık hale getirir.
## Gerçek Zamanlı Form Doğrulama ve Kullanıcı Geri Bildirimi
Livewire, sayfa yeniden yüklemeleri olmadan anında doğrulama geri bildirimi sağlamada üstündür. Framework, kullanıcılar yazarken özellikleri doğrular ve hataları form alanlarının yanında gerçek zamanlı olarak görüntüler.
```php
// app/Livewire/RegistrationForm.php
[
'required',
'confirmed',
Password::min(8)->mixedCase()->numbers(),
],
];
}
public function updated(string $property): void
{
// Değişiklikte tek özelliği doğrula
$this->validateOnly($property);
}
public function register(): void
{
$validated = $this->validate();
$user = User::create([
'email' => $validated['email'],
'name' => $validated['name'],
'password' => bcrypt($validated['password']),
]);
auth()->login($user);
$this->redirect('/dashboard');
}
public function render()
{
return view('livewire.registration-form');
}
}
```
İlgili Blade şablonu, kullanıcılar bir alanı terk ettiğinde doğrulamayı tetiklemek için `wire:model.blur` kullanır ve yanıt verirlik ile sunucu yükü arasında denge kurar:
```blade
{{-- resources/views/livewire/registration-form.blade.php --}}
```
Bu kalıp Livewire'ın güçlü yanlarını gösterir: istemci tarafı yanıt verirliliği ile sunucu tarafı doğrulama mantığı, JavaScript olmadan yükleme durumları ve bileşen mantığı ile sunum arasında temiz ayrım.
## Olaylarla Ebeveyn-Çocuk Bileşen İletişimi
Karmaşık arayüzler genellikle birbiriyle iletişim kuran birden fazla Livewire bileşeni gerektirir. Livewire 3, bu amaç için `dispatch` ve `#[On]` nitelik kalıbını kullanan geliştirilmiş bir olay sistemi sağlar.
```php
// app/Livewire/TaskBoard.php - Ebeveyn bileşen
update(['status' => $newStatus]);
}
#[On('task-created')]
public function refreshBoard(): void
{
// Bileşen otomatik olarak yeniden render edilir
}
public function render()
{
return view('livewire.task-board', [
'tasks' => Task::all()->groupBy('status'),
]);
}
}
```
```php
// app/Livewire/TaskCard.php - Çocuk bileşen
dispatch('task-moved', taskId: $this->task->id, newStatus: $status);
}
public function render()
{
return view('livewire.task-card');
}
}
```
Olaylar varsayılan olarak bileşen hiyerarşisinde yukarı doğru kabarcıklanır. Ebeveyn-çocuk ilişkisi dışındaki bileşenler arası iletişim için olaylar, `$this->dispatch('event-name')->to(ComponentClass::class)` kullanılarak belirli bileşenleri hedefleyebilir.
## İstemci Tarafı Etkileşim için Alpine.js Entegrasyonu
Livewire 3, [Alpine.js](https://alpinejs.dev/) ile birlikte gelir ve bazı etkileşimlerin istemci tarafında gerçekleşirken diğerlerinin sunucuya gidiş-dönüş yaptığı hibrit kalıplara olanak tanır. Bu kombinasyon, karmaşık mantık için Livewire'ın sunucu tarafı modelini korurken basit UI geçişleri için sunucu yükünü azaltır.
```blade
{{-- resources/views/livewire/notification-dropdown.blade.php --}}
@foreach($notifications as $notification)
{{ $notification->title }}
{{ $notification->message }}
@endforeach
```
`@entangle` direktifi, Alpine.js durumu ve Livewire özellikleri arasında çift yönlü bağlama oluşturur. `unreadCount`'taki değişiklikler Alpine veya Livewire'da otomatik olarak diğerine senkronize olur ve sunucu otoritesini korurken iyimser UI güncellemelerine olanak tanır.
## İlerleme Takibi ile Dosya Yüklemeleri
Livewire, yerleşik ilerleme takibi, doğrulama ve geçici depolama ile dosya yükleme işleme sağlar. `WithFileUploads` trait'i, herhangi bir bileşene gerekli tüm işlevselliği ekler.
```php
// app/Livewire/DocumentUploader.php
validate();
}
public function save(): void
{
$this->validate();
$this->uploadedPath = $this->document->store('documents', 'public');
$this->dispatch('document-uploaded', path: $this->uploadedPath);
$this->reset('document');
}
public function render()
{
return view('livewire.document-uploader');
}
}
```
```blade
{{-- resources/views/livewire/document-uploader.blade.php --}}
@error('document')
{{ $message }}
@enderror
@if($document)
{{ $document->getClientOriginalName() }}
@endif
```
Şablon, Livewire'ın yükleme olayları ile istemci tarafı ilerleme görselleştirmesi için Alpine.js'i birleştirir. Dosyalar önce geçici depolamaya yüklenir ve son depolamadan önce önizleme ve doğrulamaya olanak tanır.
## Livewire 3 Geliştiricileri için Mülakat Soruları
Teknik mülakatlar genellikle Livewire'ın mimarisi, güvenlik modeli ve performans özelliklerinin anlaşılmasını araştırır. Aşağıdaki sorular, Livewire deneyimine sahip Laravel geliştiricileri işe alırken sıkça karşılaşılır.
> **Mülakat Odak Alanları**
>
> Mülakatçılar üç ana alanı değerlendirir: Livewire'ın istek yaşam döngüsünü anlama, public özelliklerle ilgili güvenlik farkındalığı ve bileşen performansını optimize etme yeteneği. Livewire'ı ne zaman KULLANMAMAK gerektiğini bilmek, nasıl kullanılacağını bilmek kadar önemlidir.
**Livewire, istekler arasında bileşen durumunu nasıl korur?**
Livewire, tüm public özellikleri her istekle birlikte seyahat eden bir payload'a serileştirir. Bileşenin durumu kodlanır, kurcalamayı önlemek için imzalanır ve tarayıcıya gönderilir. Sonraki etkileşimlerde bu payload sunucuya geri döner ve Livewire, eylemi işlemeden önce bileşen örneğini yeniden oluşturur.
**Livewire public özelliklerinde hangi güvenlik endişeleri vardır ve Livewire bunları nasıl ele alır?**
Public özellikler, tarayıcıya gönderilen serileştirilmiş payload'a dahil oldukları için savunmasızdır. Kötü niyetli kullanıcılar bu payload'u geri göndermeden önce değiştirebilir. Livewire bunu checksum doğrulaması ile ele alır—herhangi bir kurcalama isteğin başarısız olmasına neden olur. Ek olarak, `#[Locked]` niteliği özellikleri yalnızca sunucu tarafı olarak işaretler ve checksum'lar tehlikeye atılsa bile frontend'den değiştirilmelerini önler.
**wire:model, wire:model.live ve wire:model.blur arasındaki farkı açıklayın.**
Livewire 3'te `wire:model` varsayılan olarak ertelenmiş bağlama kullanır—özellik yalnızca bir eylem tetiklendiğinde güncellenir (form gönderimi gibi). `wire:model.live`, her input değişikliğinde özelliği günceller ve her tuş vuruşunda sunucu gidiş-dönüşü tetikler. `wire:model.blur`, element odağı kaybettiğinde güncellenir ve yanıt verirlik ile azaltılmış sunucu yükü arasında denge kurar. `.debounce` değiştiricisi live güncellemelere gecikme ekler: `wire:model.live.debounce.500ms`.
**Bir geliştirici Inertia.js veya JavaScript framework yerine Livewire'ı ne zaman tercih etmelidir?**
Livewire, ekibin güçlü PHP uzmanlığına sahip olduğu ancak sınırlı JavaScript deneyimi olduğu, SEO gereksinimlerinin sunucu tarafında render edilen içeriği tercih ettiği veya uygulamanın sunucu tarafı doğrulamalı karmaşık formlar içerdiği durumlarda en uygunudur. Inertia.js veya JavaScript framework'leri, karmaşık istemci tarafı durumuyla yüksek etkileşimli dashboard'lar, çevrimdışı işlevsellik gerektiren uygulamalar veya SPA mental modelini tercih eden JavaScript uzmanlığına sahip ekipler için daha uygundur.
**Livewire bileşenleri performans için nasıl optimize edilir?**
Anahtar optimizasyonlar şunlardır: istekleri azaltmak için `wire:model.live` yerine `wire:model.blur` kullanmak, önbelleğe almayı etkinleştirmek için pahalı hesaplamalar için `#[Computed]` uygulamak, ilk render performansı için `wire:init` ile bileşenleri lazy yüklemek, her istekte gönderilen veriyi sınırlamak için [sayfalama](https://laravel.com/docs/pagination) kullanmak ve reaktif özellikleri kapsamlandırarak gereksiz yeniden render'ları önlemek. Listeler için `wire:key` niteliği, Livewire'ın morphing sırasında öğeleri verimli bir şekilde takip etmesine yardımcı olur.
Livewire ile birlikte kullanılan Laravel olay sistemini daha derinlemesine keşfetmek için [olaylar ve dinleyiciler mülakat soruları](/technologies/laravel/interview-questions/events-listeners) makalesine bakılabilir. [Dependency injection kalıplarını](/technologies/laravel/interview-questions/service-container-di) anlamak da karmaşık Livewire bileşenlerini yapılandırırken değerli olduğunu kanıtlar.
## Livewire Bileşenlerini Etkili Test Etme
Livewire, Laravel'in test framework'ü ile entegre olan akıcı bir test API'si sağlar. Testler kullanıcı etkileşimlerini simüle edebilir, bileşen durumunu assert edebilir ve DOM çıktısını doğrulayabilir.
```php
// tests/Feature/Livewire/SearchUsersTest.php
create(['name' => 'John Doe', 'role' => 'admin']);
User::factory()->create(['name' => 'Jane Smith', 'role' => 'user']);
Livewire::test(SearchUsers::class)
->set('search', 'John')
->assertSee('John Doe')
->assertDontSee('Jane Smith');
}
public function test_can_filter_by_role(): void
{
User::factory()->create(['name' => 'Admin User', 'role' => 'admin']);
User::factory()->create(['name' => 'Regular User', 'role' => 'user']);
Livewire::test(SearchUsers::class)
->set('role', 'admin')
->assertSee('Admin User')
->assertDontSee('Regular User');
}
public function test_pagination_resets_on_search_change(): void
{
User::factory()->count(25)->create();
Livewire::test(SearchUsers::class)
->call('gotoPage', 2)
->assertSet('paginators.page', 2)
->set('search', 'test')
->assertSet('paginators.page', 1);
}
public function test_url_reflects_search_parameters(): void
{
Livewire::withQueryParams(['search' => 'existing'])
->test(SearchUsers::class)
->assertSet('search', 'existing');
}
}
```
Test paketi işlevselliği, durum yönetimini ve URL senkronizasyonunu kapsar. Livewire bileşenleri dahil kapsamlı Laravel test stratejileri için [Laravel test en iyi uygulamaları](/blog/laravel/laravel-testing-pest-mocking-best-practices) makalesi ek kalıplar ve teknikler sağlar.
## Sonuç
- Livewire 3, sunucu tarafı rendering ve DOM morphing aracılığıyla saf PHP'de reaktif arayüzlere olanak tanır ve birçok Laravel uygulamasında ayrı JavaScript framework'lerine olan ihtiyacı ortadan kaldırır
- PHP 8 nitelikleri (`#[Rule]`, `#[Locked]`, `#[Computed]`, `#[Url]`), kod okunabilirliğini ve güvenliğini artıran deklaratif yapılandırma sağlar
- Dahili Alpine.js entegrasyonu, basit etkileşimlerin istemci tarafında kalırken karmaşık mantığın sunucuda kaldığı hibrit kalıplara olanak tanır
- Güvenlik dikkat gerektirir: hassas özellikler için `#[Locked]` kullanılmalı ve public özelliklerin her istek payload'unda seyahat ettiği anlaşılmalıdır
- Performans optimizasyonu, uygun `wire:model` değiştiricileri aracılığıyla gidiş-dönüşleri azaltmaya ve pahalı işlemler için computed özellikleri uygulamaya odaklanır
- Mülakat soruları mimari anlayışına, güvenlik farkındalığına ve alternatif yaklaşımların (Inertia.js, SPA'lar) gereksinimlere ne zaman daha uygun olduğunu bilmeye odaklanır
---
Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack.
HTML version of this page: https://sharpskill.dev/tr/blog/laravel/laravel-livewire-3-reactive-applications-interview-questions