Laravel Livewire怎麼用? 14個實用技巧分享
Laravel Livewire是一個很好的工具,可以在頁面上實作動態行為,而無需直接編寫 JavaScript 程式碼。而且,像任何工具一樣,它有很多“隱藏的寶石”,包括官方文件和開發者提供的實用額外提示。我決定在這篇文章中彙編其中的一些。讓我們開始吧!
1. 不需要render()
#典型的render()
方法看起來像這樣:
// app/Http/Livewire/PostsShow.php class PostsShow extends Component { public function render() { return view('livewire.posts-show'); } }
但是,如果你的render()
方法只是一個單行來呈現預設 視圖,您可以從元件中刪除該render()
方法,它仍然可以工作,從供應商的方法載入預設為render()
。 【相關推薦:laravel影片教學】
class PostsShow extends Component { //这个空组件仍将工作并加载Blade文件 }
#2.子資料夾中的元件
如果你想在子文件夾中產生一個元件,例如app/Http/Livewire/Folder/Component.php
,你有兩種方法:
php artisan make:livewire Folder/Component
或
php artisan make:livewire folder.component
請注意,第一種方式是第一個字母大寫,第二種方式是小寫。在這兩種情況下,都會產生兩個檔案:
- app/Http/Livewire/Folder/Component.php
- resources/views/livewire/folder/component.blade .php
如果子資料夾不存在,將自動建立它們。
3.非預設資料夾中的元件
如果您將某些外部套件與Livewire 元件一起使用,則您的Livewire 元件可能位於與預設的app/Http/Livewire
不同的資料夾中。您可能需要將其名稱綁定到實際位置。
通常可以在app/Providers/AppServiceProvider.php
(或任何服務提供者)方法boot()
中完成:
class AppServiceProvider extends ServiceProvider { public function boot() { Livewire::component('shopping-cart', \Modules\Shop\Http\Livewire\Cart::class); } }
4.輕鬆重新命名或移動元件
如果您在使用make:livewire
產生元件時打錯字,請不要擔心。您不需要手動重命名兩個文件,有一個命令供我們使用。
例如,如果您編寫了php artisan make:livewire Prduct
#,但您想要“Product”,並且還決定將其放入子資料夾中,則可以使用以下命令進行改進:
php artisan livewire:move Prduct Products/Show
結果會是這樣的:
COMPONENT MOVED CLASS: app/Http/Livewire/Prduct.php => app/Http/Livewire/Products/Show.php VIEW: resources/views/livewire/prduct.blade.php => resources/views/livewire/products/show.blade.php
#5.更改預設元件模板
##Livewire 元件是使用預設模板生成的,即所謂的「存根」。它們隱藏在 Livewire 套件的“vendor”資料夾中,但您也可以根據需要發布和編輯它們。 Run this command:php artisan livewire:stubs
/stubs,其中包含一些檔案。
stubs/livewire.stub 的範例:
<?php namespace [namespace]; use Livewire\Component; class [class] extends Component { public function render() { return view('[view]'); } }
render() 方法的元件,只需將其從存根檔案中刪除,然後每次執行
php artisan make:livewire Component,它都會從您更新的範本中取得「公共存根」。
6. 不要為了設定值而建立方法
如果您有一個會設定某個屬性的某個值的Click事件,您可以這樣:<button wire:click="showText">Show</button>
class Show extends Component { public $showText = false; public function showText() { $this->showText = true; } }
<button wire:click="$set('showText', true)">Show</button>
$set並提供兩個參數:您的屬性名稱和新值。
7. 更進一步:輕鬆設定true/false
在上一個技巧之後,如果您的屬性是一個帶有true/false的布爾變量,並且您想要有一個顯示/隱藏按鈕,您可以這樣:<button wire:click="$toggle('showText')">Show/Hide</button>
注意:我個人會避免使用Livewire 來實現這種簡單的切換效果,因為它會向伺服器添加額外的請求。
相反,最好使用JavaScript,例如Alpine.js:
<div x-data="{ open: false }"> <button @click="open = true">Expand</button> <span x-show="open"> Content... </span> </div>
8. 最小化伺服器請求的三種方法
Livewire 的主要詬病之一是它對伺服器的請求太多。如果您在輸入欄位中有wire:model,則每次按鍵都可能會呼叫伺服器以重新渲染元件。如果您有一些即時效果,例如“即時搜尋”,那將非常方便。但通常,就效能而言,伺服器請求可能非常昂貴。
wire:model 的這種行為非常容易。
wire:model.debounce
:預設情況下,Livewire 在輸入按鍵後等待 150 毫秒,然後再向伺服器執行請求。但您可以覆寫它:
#
wire:model.lazy
:默认情况下,Livewire 会监听输入上的所有**事件,然后执行服务器请求。 通过提供lazy
指令,您可以告诉 Livewire 仅监听change
事件。 这意味着用户可以继续输入和更改,并且只有当用户点击离开该字段时才会触发服务器请求。wire:model.defer
:这不会在输入更改时触发服务器请求。 它将在内部保存新值并将其传递给下一个网络请求,该请求可能来自其他输入字段或其他按钮的点击。
9.自定义验证属性
Livewire 验证的工作方式与 Laravel 验证引擎非常相似,但有一些不同之处。在 Laravel 中,如果你想自定义属性的名称,你可以定义 attributes()
方法 在表单请求类中。
在 Livewire 中,方法不同。 在组件中,您需要定义一个名为「$validationAttributes」的属性并在那里分配键值数组:
class ContactForm extends Component { protected $validationAttributes = [ 'email' => 'email address' ]; // ... }
这对于常见的错误消息很有用,例如「需要字段 XYZ」。默认情况下,该 XYZ 被替换为字段名称,用户可能不会理解这个的词,因此应该将其替换为更清晰的错误消息。
10. 加载提示
从我所见,官方文档中描述但很少使用的东西。如果某些动作在屏幕上需要一段时间,则应该显示一些加载指示符,例如旋转的 gif,或者只是「正在加载数据…」的文本
在 Livewire 中,它不仅易于实现,而且还易于定制。
处理数据的最简单示例:当服务器发出请求时,它将显示「正在处理付款…」文本,直到服务器请求完成并返回结果。
<div> <button wire:click="checkout">Checkout</button> <div wire:loading> Processing Payment... </div> </div>
在实践中,我喜欢仅在需要一段时间时才显示此类加载指示器。在所有可能的情况下,每次都重新渲染 DOM 是没有意义的。 如果我们只在请求时间超过 500 毫秒时才这样做呢?
这很简单:
<div wire:loading.delay.longer>...</div>
还有可能使用 CSS 类来加载状态,将它们附加到特定的操作,等等:阅读 [官方文档](laravel-livewire.com/docs/2.x/load... #states#toggling-elements)。
11. 离线指示器
Livewire 的另一个记录在案但鲜为人知的功能是告诉用户他们的互联网连接是否丢失。如果您的应用程序使用实时数据或屏幕上的多次更新,这将是非常有用的:您可能会模糊网页的某些部分并显示「离线」文本。
这也很简单:
<div wire:offline> You are now offline. </div>
此外,正如我所提到的,您可以通过分配 CSS 类来模糊某些元素,如下所示:
<div wire:offline.class="bg-red-300"></div>
12. 使用 Bootstrap 框架分页
与 Laravel 类似,Livewire 默认使用来自 Tailwind 框架的分页样式。 幸运的是,它很容易覆盖,只需为属性提供不同的值:
class ShowPosts extends Component { use WithPagination; protected $paginationTheme = 'bootstrap';
您可以直接在 Livewire Github 存储库 中查看可用的分页设计。 在浏览时,我没有找到任何关于使用 Bootstrap 4 还是 Bootstrap 5 版本的信息。
13. No Mount:自动路由模型绑定
如果您想将对象传递给 Livewire 组件,这是一种典型的方法,使用 mount()
方法:
class ShowPost extends Component{ public $post; public function mount(Post $post) { $this->post = $post; } }
然后,在 Blade 的某个地方,使用:
@livewire('show-post', $post)
但是您是否知道,如果您为 Livewire 属性提供类型提示,路由模型绑定会自动生效?
class ShowPost extends Component{ public Post $post; }
就是这样,根本不需要mount()
方法。
14.删除时的确认提示
如果您有一个「删除」按钮,并且您想在执行操作之前调用确认弹窗在 JavaScript 中,则此代码将无法在 Livewire 中正常工作:
<button wire:click="delete($post->id)" onclick="return confirm('Are you sure?')">Delete</button>
对此有一些可能的解决方案,可能最优雅的方法是在 Livewire 事件发生之前停止它:
<button onclick="confirm('Are you sure?') || event.stopImmediatePropagation()" wire:click="delete($post->id)">Delete</button>
event.stopImmediatePropagation()
如果确认结果是假的,将停止调用LiveWire方法。
您可以在this Github issue discussion中找到一些其他可能的解决方案.
就是这样,一些LiveWire特征和小提示。希望对大家有用!
原文地址:https://laravel-news.com/laravel-livewire-tips-and-tricks
译文地址:https://learnku.com/laravel/t/66995
更多编程相关知识,请访问:编程教学!!
以上是Laravel Livewire怎麼用? 14個實用技巧分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。
