Laravel Livewire를 어떻게 사용하나요? 공유할 수 있는 14가지 실용적인 팁
Laravel Livewire는 JavaScript 코드를 직접 작성하지 않고도 페이지에서 동적 동작을 구현하기 위한 훌륭한 도구입니다. 그리고 다른 도구와 마찬가지로 공식 문서와 개발자의 유용한 추가 팁을 포함하여 많은 "숨겨진 보석"이 있습니다. 나는 이 기사에서 그 중 일부를 편집하기로 결정했습니다. 시작해 봅시다!
1. render()
가 필요하지 않습니다.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; } }
但实际上,您可以直接从vender文件为Livewire属性赋一个新值,而不需要在Livewire组件中有单独的方法。
以下是代码:
<button wire:click="$set('showText', true)">Show</button>
因此,如果您的属性是一个布尔变量,并且希望有一个显示/FALSE按钮,则您需要调用$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 毫秒,然后再向服务器执行请求。 但您可以覆盖它:<input type="text" wire:model.debounce.1000ms="propertyName">
일반적인render()
메서드는 다음과 같습니다.🎜그러나 만약class ContactForm extends Component { protected $validationAttributes = [ 'email' => 'email address' ]; // ... }
로그인 후 복사로그인 후 복사render()
메서드는 🎜기본 보기를 렌더링하는 한 줄일 뿐입니다. 구성 요소에서render()
메서드를 제거해도 여전히 유지됩니다. 작업, 공급자로부터의 메서드 로딩은 기본적으로render()
로 설정됩니다. [관련 권장사항: laravel 동영상 튜토리얼]🎜<div> <button wire:click="checkout">Checkout</button> <div wire:loading> Processing Payment... </div> </div>
로그인 후 복사로그인 후 복사
🎜🎜2 . 하위 폴더의 구성 요소🎜app/Http/Livewire/Folder/Component.php
와 같은 하위 폴더에 구성 요소를 생성하려면 두 가지 방법이 있습니다. 🎜🎜 또는 🎜<div wire:loading.delay.longer>...</div>
로그인 후 복사로그인 후 복사🎜 첫 번째 방법은 첫 글자를 대문자로 쓰는 것이고, 두 번째 방법은 소문자로 쓰는 것입니다. 두 경우 모두 🎜<div wire:offline> You are now offline. </div>
로그인 후 복사로그인 후 복사- app/Http/Livewire/Folder/Component.php
- resources/views/livewire/folder/comComponent.blade
🎜🎜3. 기본이 아닌 폴더의 구성 요소🎜 Livewire 구성 요소와 함께 일부 외부 패키지를 사용하는 경우 Livewire 구성 요소가 기본와 동일한 폴더에 위치할 수 있습니다. app/Http/Livewire
를 다른 폴더에 넣으세요. 이름을 실제 위치에 바인딩해야 할 수도 있습니다. 🎜🎜이 작업은 일반적으로app/Providers/AppServiceProvider.php
(또는 모든 서비스 공급자) 메서드boot()
에서 수행할 수 있습니다. 🎜<div wire:offline.class="bg-red-300"></div>
로그인 후 복사로그인 후 복사
🎜🎜4 . 구성 요소 이름을 쉽게 바꾸거나 이동할 수 있습니다.🎜make:livewire
를 사용하여 구성 요소를 생성할 때 오타가 있어도 걱정하지 마세요. 두 파일의 이름을 수동으로 바꿀 필요는 없습니다. 사용할 명령이 있습니다. 🎜🎜예를 들어,php artisan make:livewire Prduct
를 작성했지만 "제품"을 원하고 하위 폴더에 넣기로 결정한 경우 다음 명령을 사용하여 개선할 수 있습니다: 🎜🎜 결과는 다음과 같습니다:🎜class ShowPosts extends Component { use WithPagination; protected $paginationTheme = 'bootstrap';
로그인 후 복사로그인 후 복사class ShowPost extends Component{ public $post; public function mount(Post $post) { $this->post = $post; } }
로그인 후 복사로그인 후 복사
🎜🎜5. 기본 구성 요소 템플릿 변경🎜Livewire 구성 요소는 소위 "스텁"이라는 기본 템플릿을 사용하여 생성됩니다. Livewire 패키지의 "vendor" 폴더에 숨겨져 있지만 필요에 따라 게시하고 편집할 수 있습니다. 🎜🎜다음 명령을 실행하세요:🎜🎜일부 파일이 포함된 새 폴더@livewire('show-post', $post)
로그인 후 복사로그인 후 복사/stubs
를 찾을 수 있습니다.stubs/livewire.stub
의 예: 🎜🎜예를 들어class ShowPost extends Component{ public Post $post; }
로그인 후 복사로그인 후 복사render()
메서드를 사용하지 않는 구성 요소를 생성하려면 다음을 수행하세요. 스텁 파일에서 이를 제거하고php artisan make:livewire Component
를 실행할 때마다 업데이트된 템플릿에서 "공개 스텁"을 가져옵니다. 🎜
🎜🎜6. 단지 값을 설정하기 위한 메서드를 만들지 마세요🎜속성 값을 설정하는 Click 이벤트가 있는 경우 다음을 수행할 수 있습니다. 🎜🎜그러면 🎜<button wire:click="delete($post->id)" onclick="return confirm('Are you sure?')">Delete</button>
로그인 후 복사로그인 후 복사🎜 그런데 실제로는 Livewire 컴포넌트에서 별도의 메소드 없이 Vendor 파일에서 직접 Livewire 속성에 새로운 값을 할당할 수 있습니다. 🎜🎜다음은 코드입니다: 🎜rrreee🎜따라서 속성이 부울 변수이고 SHOW/FALSE 버튼을 갖고 싶다면<button onclick="confirm('Are you sure?') || event.stopImmediatePropagation()" wire:click="delete($post->id)">Delete</button>
로그인 후 복사로그인 후 복사$set
를 호출하고 속성 이름이라는 두 가지 인수를 제공해야 합니다. 그리고 새로운 가치. 🎜
🎜🎜7. 한 단계 더 나아가서 쉽게 true/false를 설정하세요.🎜이전 팁에 이어 속성이 true/false를 갖는 부울 변수이고 표시/숨기기 버튼을 사용하면 다음과 같습니다: 🎜rrreee🎜🎜 참고: 저는 개인적으로 서버에 추가 요청을 추가하므로 이 간단한 토글 효과에 Livewire를 사용하는 것을 피하고 싶습니다. 🎜🎜대신 Alpine.js와 같은 JavaScript를 사용하는 것이 더 좋습니다. 🎜rrreee
🎜🎜8. 서버 요청을 최소화하는 세 가지 방법🎜 Livewire의 주요 비판 중 하나는 서버에 요청이 너무 많다는 것입니다. 입력 필드에wire:model
이 있는 경우 키를 누를 때마다 서버를 호출하여 구성 요소를 다시 렌더링할 수 있습니다. 라이브서치 등 실시간 효과가 있다면 매우 편리할 것 같습니다. 그러나 일반적으로 서버 요청은 성능 측면에서 매우 비쌀 수 있습니다. 🎜🎜그러나wire:model
의 이 동작을 사용자 정의하는 것은 매우 쉽습니다. 🎜- 🎜
wire:model.debounce
: 기본적으로 Livewire는 키 입력을 입력한 후 150밀리초를 기다린 후 서버 요청을 실행합니다. 하지만 이를 재정의할 수 있습니다:<input type="text" wire:model.debounce.1000ms="propertyName">
🎜 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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP는 서버 측에서 널리 사용되는 스크립팅 언어이며 특히 웹 개발에 적합합니다. 1.PHP는 HTML을 포함하고 HTTP 요청 및 응답을 처리 할 수 있으며 다양한 데이터베이스를 지원할 수 있습니다. 2.PHP는 강력한 커뮤니티 지원 및 오픈 소스 리소스를 통해 동적 웹 컨텐츠, 프로세스 양식 데이터, 액세스 데이터베이스 등을 생성하는 데 사용됩니다. 3. PHP는 해석 된 언어이며, 실행 프로세스에는 어휘 분석, 문법 분석, 편집 및 실행이 포함됩니다. 4. PHP는 사용자 등록 시스템과 같은 고급 응용 프로그램을 위해 MySQL과 결합 할 수 있습니다. 5. PHP를 디버깅 할 때 error_reporting () 및 var_dump ()와 같은 함수를 사용할 수 있습니다. 6. 캐싱 메커니즘을 사용하여 PHP 코드를 최적화하고 데이터베이스 쿼리를 최적화하며 내장 기능을 사용하십시오. 7

PHP는 현대 웹 개발, 특히 컨텐츠 관리 및 전자 상거래 플랫폼에서 중요합니다. 1) PHP는 Laravel 및 Symfony와 같은 풍부한 생태계와 강력한 프레임 워크 지원을 가지고 있습니다. 2) Opcache 및 Nginx를 통해 성능 최적화를 달성 할 수 있습니다. 3) PHP8.0은 성능을 향상시키기 위해 JIT 컴파일러를 소개합니다. 4) 클라우드 네이티브 애플리케이션은 Docker 및 Kubernetes를 통해 배포되어 유연성과 확장 성을 향상시킵니다.

PHP는 특히 빠른 개발 및 동적 컨텐츠를 처리하는 데 웹 개발에 적합하지만 데이터 과학 및 엔터프라이즈 수준의 애플리케이션에는 적합하지 않습니다. Python과 비교할 때 PHP는 웹 개발에 더 많은 장점이 있지만 데이터 과학 분야에서는 Python만큼 좋지 않습니다. Java와 비교할 때 PHP는 엔터프라이즈 레벨 애플리케이션에서 더 나빠지지만 웹 개발에서는 더 유연합니다. JavaScript와 비교할 때 PHP는 백엔드 개발에서 더 간결하지만 프론트 엔드 개발에서는 JavaScript만큼 좋지 않습니다.

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.

PHP가 많은 웹 사이트에서 선호되는 기술 스택 인 이유에는 사용 편의성, 강력한 커뮤니티 지원 및 광범위한 사용이 포함됩니다. 1) 배우고 사용하기 쉽고 초보자에게 적합합니다. 2) 거대한 개발자 커뮤니티와 풍부한 자원이 있습니다. 3) WordPress, Drupal 및 기타 플랫폼에서 널리 사용됩니다. 4) 웹 서버와 밀접하게 통합하여 개발 배포를 단순화합니다.

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP와 Python은 각각 고유 한 장점이 있으며 다양한 시나리오에 적합합니다. 1.PHP는 웹 개발에 적합하며 내장 웹 서버 및 풍부한 기능 라이브러리를 제공합니다. 2. Python은 간결한 구문과 강력한 표준 라이브러리가있는 데이터 과학 및 기계 학습에 적합합니다. 선택할 때 프로젝트 요구 사항에 따라 결정해야합니다.
