Maximize Your Potential

BackEnd

[라라벨] livewire wire:model 실시간 반영 오류 해결

maxworld 2024. 10. 12. 10:58
728x90
반응형

[라라벨] livewire wire:model 실시간 반영 오류 해결


라라벨에서 코드를 작성할때 livewire wire:model을 사용할때 실시간으로 input 값이 반영되게끔하고 싶을때가 있습니다.

시중에 있는 강의에서는 wire:model로 변수를 설정하면 다 되는 것 처럼 강의가 설명되어있는데 옛날 버젼이라 그런지 오류가 많았습니다. 하지만 이것저것 찾아보다 overstack에서 결국 해결책을 찾았습니다.

 

<h1>{{ $post }}</h1> <!-- 변수 출력 시 $post 사용 -->
<p>-----구분 줄--------</p>
<input type="text" wire:model="post">

기존 코드는 다음과 같이 설정을 해서 원하는대로 라이브 반영이 실행되지 않았지만,

다음과 .live를 덧 붙이니 실행되었습니다.

<input type="text" wire:model.live="post">

 

진작에 구글링을 할 걸 그랬습니다. 

 

다음은 간단하게 제가 라이브 와이어로 실습한 코드를 알려드립니다.

먼저 livewire:model, livewire:click, livewire:validation 입니다. 

<?php

namespace App\Livewire;

use Livewire\Component;

class Practice extends Component
{

    public $post; // 기본값을 여기에 설정할 수 있습니다.
    public $clicked = '클릭 이전';
    public $name;
    public $email;
    public $password;

    protected $rules = [
        'name' => 'required|min:6',
        'email' => 'required|email',
        'password' => 'required|min:6',
    ];

    protected $messages = [
        "name.required" => "이름을 입력해주세요",
        "name.min" => "이름은 최소 6자 이상이어야 합니다",
        "email.required" => "이메일을 입력해주세요",
    ];

    public function click()
    {
        $this->clicked = '클릭 이후';
    }

    public function validation()
    {
        $this->validate();
    }

  
    public function render()
    {
        return view('livewire.practice',['post' => $this->post]);
    }
}
<div>
    <h1>{{ $post }}</h1> <!-- 변수 출력 시 $post 사용 -->
    <p>-----구분 줄--------</p>
    <input type="text" wire:model="post">
    <!-- <input type="text" wire:model.live="post"> -->
    <p>-----구분 줄--------</p>
    <h1>{{ $clicked }}</h1>
    <button wire:click="click">Click me</button> 
    <!-- 올바른 wire:click 사용 -->
    <p>-----구분 줄--------</p>
    <form wire:submit.prevent="validation">
        <input type="text" wire:model="name">
        @error('name')
            <div style="color:red;">{{ $message }}</div>
        @enderror
        <br/>
        <input type="text" wire:model="email">
        @error('email')
            <div style="color:red;">{{ $message }}</div>
        @enderror
        <br/>
        <input type="password" wire:model="password">
        <br/>
        <button type="submit">Submit</button>
    </form>
</div>
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Laravel</title>
        @vite('resources/css/app.css', 'resources/js/app.js')
    @livewireStyles
    </head>
    <body>        
        <livewire:livewire/> 
        @livewireScripts
    </body>
</html>

 

이렇게 livewire:model로 변수를 실시간 반영하거나 click을 통해서 데이터를 업데이트 할 수도 있으며, validation을 통해 값을 검증 할수도 있습니다.

 

인프런에서 들은 강의를 바탕으로 실습을 한 것 입니다. 부족한 부분은 최신 버젼에 맞춰서 제가 따로 실습을 했습니다.