LIVEWIRE - JS БОЛЬШЕ НЕ НУЖЕН?

Автор: Eugeny Nosenko
Дата публикации: 2023-01-16 13:15:35   1519


LIVEWIRE  - JS БОЛЬШЕ НЕ НУЖЕН?

Привет Мир!

Сегодня решил протестировать новый для себя инструмент LiveWire.

Что же это такое?

Перевод с официального сайта https://laravel-livewire.com/

Создавать современные веб-приложения сложно. Такие инструменты, как Vue и React, чрезвычайно эффективны, но сложность, которую они добавляют к рабочему процессу разработчика с полным стеком, просто безумна.
Livewire — это фреймворк с полным стеком для Laravel, который упрощает создание динамических интерфейсов, не выходя за рамки комфорта Laravel.

Получается, что можно писать динамические компоненты с AJAX запросами без JS :-).

Фантастика подумал я! Это просто какая-то магия!

Надо все попробовать самому. Все должно быть просто.

Установка:

composer require livewire/livewire

В шаблон нужно включить

    ...
    @livewireStyles
</head>
    ...
    @livewireScripts
</body>

Теперь можно создать компонент:

php artisan make:livewire SearchPosts

Далее я добавил свою логику без единой строчки JS. Ccылка на Gist https://gist.github.com/imjonos/8adc7d3bb78a29e8247b080a9a920252

    namespace App\Http\Livewire;
	use App\Services\PostService;
	use Illuminate\Contracts\Container\BindingResolutionException;
	use Illuminate\Contracts\View\View;
	use Livewire\Component;

	final class SearchPosts extends Component
	{
	    public string $search = '';
	    private PostService $postService;

	    /**
	     * @throws BindingResolutionException
	     */
	    public function __construct($id = null)
	    {
	        $this->postService = app()->make(PostService::class);
	        parent::__construct($id);
	    }
	
	    public function render(): View
	    {
	        return view('livewire.search-posts', [
	            'posts' => $this->postService->search([
	                'name' => $this->search
	            ])
	        ]);
	    }
	}

Blade

<div>
	    <input wire:model="search" type="text" placeholder="Search"/>
	    <ul>
	        @foreach($posts as $post)
	            <li>{{ $post->name }}</li>
	        @endforeach
	    </ul>
</div>

Показать компонент в нужном месте

@livewire('search-posts')

Это все что необходимо!

При вводе текста в поле ввода видно отправку запросов и список обновляется динамически.

Само тело запроса выглядит так:

Ответ от сервера:

Тут я немного огорчился. Сервер возвращает JSON в котором HTML. Не знаю на сколько это хорошо. Нужно больше изучить вопрос. Просто я привык к тому что нужно отправлять как можно меньше данных и самое нужное. А отрисовывать все на стороне клиента, если мы говорим об AJAX запросах.

В целом очень крутой инструмент который позволяет очень быстро создавать динамические компоненты без JS.

Всем счастливой разработки </>



Оставить комментарий:
Имя:
Комментарий: