Arkadaşlar livewire yi kullanan oldumu aranızda vue yerine tercih edilebilirmi, performans kaybı yaşarmıyız projelerde ?
Laravel Livewire Hakkında
- Düzenlendi
jettem İkisi farklı şeyler, performans ise en son düşüneceğiniz bir şey. Livewire Blade ile çalışıyor, şablonu render ediyor, şablonda değişiklik olduğunda ise istek atıp yeni HTML bloğu şeklindeki çıktıyı alıp şablondaki mevcut olan kısmı DOM manipülasyonu ile değiştiriyor. Eskiden jQuery ile ajax isteği atıp dönen HTML çıktıyı div içerisine gömme işini sistematik hale getirmişler. Vue gibi bir framework ile çalışırken ise genellikle backend evrensel bir JSON çıktı verecek şekilde, frontendden bağımsız çalışır. Frontend ise istek atarak bu JSON çıktıya ulaşır ve kendi içinde işlem yapar. Bu, aynı backendin başka frontend ya da uygulamalar (örneğin mobil) tarafından da kullanılmasına olanak sağlar.
Livewire ile yazılmış uygulama, Livewire olarak kalır, değiştiremezsiniz çünkü uygulama mantığını da o belirliyor. Aynı backende mobil de bağlanacaksa ona ayrı API yazmanız gerekecek. Ben Blade kullanarak klasik uygulama yapacağım ama biraz dinamik olsun istiyorum; jQuery ile vanilla yazılmış şekilde de karmaşık olsun istemiyorum diyorsanız kullanabilirsiniz ama Vue, React... gibi frontend → request → backend → response → frontend mantığı yerine tercih edilemez.
Ben birçok projemde Livewire kullandım, arama ve listelemelerde özellikle vazgeçilmezim oldu.
sineld Hocam mesela normal laravel projeye turbolinks eklemek epey uzun bir ish ama livewire de kullanmak kolay oluyor amma mesela sizin dediginiz gibi hic denemedim bazi kisimlar iicn livewire kullanip normalda bildigimiz mantikla calismak. O zaman route kisminda turbolinks ayarlamak yine uzun bir islemmi olacak?
Ben turbolinks kullanmadım zaten Livewire 2 çıktı ve turbolinks özelliği iptal edildi.
Livewire'ın sadece belli kısımlarını admin panelde kullanıyorum, önyüzde kullanmıyorum.
CodeWriteson Eğer önceliğiniz SPA uygulama ise ve klasik Laravel ←→ Vue yapmak istemiyorsanız: https://inertiajs.com/
Livewire'i daha çok kendi yaşam döngüsüne sahip dinamik bileşenler olarak düşünmeniz lazım.
sineld Hocam sorumu mazur gorun admin panel icin neden voyager kullanmiyorsunuz? Livewire 2 de simdi SPA yapisi icin turbolinks kuramiyormuyuz?
mgsmus Hocam biliyorum sizi cok yoruyoruz ama anlatimlariniz inanin bir cok dokumasyondan ve derslerden cok daha aciklayici ve anlasilir. O yuzden affiniza siginip bir soru sorucam. Inertia js tam olarak hangi konularda yardimci olur? ne isler gorur ve hangi tip sitelerde kullanilmasi daha mantiklidir?
- Düzenlendi
Controller içerisinde normal işleminizi yapıp sanki Blade basıyormuş gibi view() yerine Inertia::render() kullanarak Vue bileşeni basıyorsunuz:
app/Http/Controllers/UserController.php:
class UsersController extends Controller
{
public function index()
{
$users = User::all();
return Inertia::render('Users', compact('users'));
}
}
Bu da bastığınız bileşen:
resources/js/Pages/Users.vue:
<template>
<table>
<thead>
<tr>
<td>Id</td>
<td>Adı</td>
<td>Email</td>
<td></td>
</tr>
</thead>
<tbody>
<tr v-for="user in users" :key="${user.id}">
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
<td><inertia-link :href="`/users/${user.id}`">Ayrıntılar</inertia-link></td>
</tr>
</tbody>
</table>
</template>
<script>
export default {
props: {
users: Array,
},
}
</script>
Geri kalanını Inertia hallediyor. <inertia-link> elementine bakarsanız eğer:
<inertia-link :href="`/users/${user.id}`">Ayrıntılar</inertia-link>
İşte bu da sizin Turbolinks'in yaptığı işi yapıyor, yani sayfayı yenilemeden içeriği yüklüyor. Kısacası bir API yazmadan, Blade kullanırmış gibi bir Vue arayüz hazırlayabiliyorsunuz. Öteki türlü Laravel tarafında JSON response dönmeniz gerekecekti ve Vue tarafında Users.vue içerisinde örneğin mounted() içinde AJAX isteği atıp veriyi çekmeniz gerekecekti...
Yanlış anlaşılmasın, bu iyi ya da doğru yol demiyorum. Sadece klasik yaklaşımı biraz kolaylaştıran bir alternatif.
mgsmus Elinize saglik . Benim yapmak istedigim aslinda vue kullanmadan SPA yapmak. Cunki vue bazen karmasik geliyor bazi seyleri karistiriyorum. O yuzden klassik yapida veya livewire katarak SPA yapmak istiyorum
mgsmus Hocam mesela school management system projesi aldiniz. Hangi yolla yapardiniz?
1) Standart laravel proje
2) Laravel+ Livewire
3) Laravel + Inertiajs+Vue
4)Laravel + vue
Vuejs'ye ve JS'ye hakimseniz 3, değilseniz 2.
CodeWriteson 2 hariç diğerlerinden biri olabilir. Livewire kullanmıyorum.
sineld Tesekkurler hocam. Vue js elementary hakimim yani cok iyi degilim. Livewire ile kullansaniz crud islemlerini livewire kisiminda kullanirdiniz? Ben normalde single page yani browserde post refresh olmadan yapmayi isterdim daha hizli ve guzel gozuktugu icin.cok kararsizim
mgsmus Hocam merakimi affedin neden livewire kullanmiyorsunuz? yanlis anlamayin sizin gibi tecrubeli birinin neden kullanmadigi sebebi cok merak ediyorum.
- Düzenlendi
CodeWriteson Uzun zamandır Blade kullanmıyorum, genellikle API yazıyorum. Livewire Blade ile çalışıyor, Blade kullanmıyorsam Livewire de kullanmıyorum demektir. Blade kullanırsam belki kullanırım.
Bana sorarsanız Vue ya da React öğrenin.
mgsmus Eyvallah hocam tesekkurler. Aslinda vue kullanmaya gecit yapmak istiyorum bikac ornek projede yaptim. laravel vue livechat gibi seyler .az cok anladim vue mantigini ama tabiki cok ileri seviyede bilmiyorum vue inceliklerini ama tavsiyenizle arastirma yapip gelistirmeye calisicam. Vue kullanmayi gelistirmek icin ne yapmami onerirsiniz dokumasyondan baska?