You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Livewire任务列表组件刷新异常:触发后跳转至tasks组件

Livewire待办应用刷新异常:触发$refresh时跳转到tasks组件而非刷新index组件

我使用Livewire开发了一款待办事项应用,其中index组件负责展示任务列表,并引入了用于创建任务的create组件。创建任务时,我会dispatch一个stored事件以刷新index视图,但Livewire执行刷新操作时却跳转到了项目中的tasks组件。

我验证后确认问题出在刷新逻辑上——我在index视图中添加了一个刷新按钮:

<button wire:click="$refresh">Click</button>

点击该按钮后结果一致:Livewire调用tasks组件,并未刷新index组件。


相关代码

index组件视图(引入create组件)

<div class="m-2">
        <livewire:tasks.create @stored="$refresh"/>

        <div class="flex gap-2 mt-2">
            <div class="w-full">
                @forelse($tasks['realizadas'] as $task)
                    <div wire:key="{{ $task->id }}" class="border-2 border-gray-200 rounded-md mb-2">
                        <div class="bg-green-300 rounded-t-md p-2">
                            <p>{{ $task->date->translatedFormat('g:i A j \d\e F \d\e\l Y') }}
                                <b>({{ $task->date->diffForHumans() }})</b></p>
                        </div>

                        <div class="p-2">
                            <p class="font-medium">{{ $task->name }}</p>

                            <div class="flex justify-end gap-2">
                                <button type="button" wire:click="indexComments({{ $task->id }})"
                                        class="bg-blue-600 text-white rounded-md py-2 px-3">
                                    <i class="fa-solid fa-comment"></i>
                                </button>

                                <button type="button" wire:click="edit({{ $task->id }})"
                                        class="bg-yellow-300 rounded-md py-2 px-3" title="Editar">
                                    <i class="fa-solid fa-pen"></i>
                                </button>

                                <button type="button" wire:click="delete({{ $task->id }})"
                                        class="bg-red-600 text-white rounded-md py-2 px-3" title="Eliminar">
                                    <i class="fa-solid fa-trash"></i>
                                </button>
                            </div>
                        </div>
                    </div>
                @empty
                    <div
                        class="bg-green-300 border border-green-500 text-green-800 font-medium rounded-md p-4 text-center">
                        No tiene tareas realizadas
                    </div>
                @endforelse
            </div>
        </div>
    </div>

index组件代码

class Index extends Component
{
    public array $tasks = [];

    public function render()
    {
        $tasks = auth()->user()->tasks()->get();

        $this->tasks['realizadas'] = $tasks->where('status', 'Realizada');
        $this->tasks['pendientes'] = $tasks->where('status', 'Pendiente');
        $this->tasks['imprevistas'] = $tasks->where('status', 'Imprevisto');

        return view('livewire.tasks.index');
    }
}

create组件代码

class Create extends Component
{
use LivewireAlert;

#[Validate(['required', 'string', 'max:255'])]
public string $name = '';

#[Validate(['required', 'date'])]
public string $date = '';

#[Validate(['required', 'string', 'max:255'])]
public string $status = '';

public function store(): void
{
    $this->validate();

    $task = auth()->user()->tasks()->create($this->pull());
    $this->dispatch('stored');

    $this->alert('success', "Tarea $task->name añadida");
}
}

create组件视图

<div>
    <form wire:submit="store" class="border border-gray-300 rounded-md p-2">
        <h3 class="text-xl text-center">Crear Tarea</h3>

        <div class="flex gap-3">
            <div class="flex-1">
                <label for="name">Nombre</label>
                <input type="text" wire:model="name" id="name"
                       class="w-full border-gray-300 rounded-md" autocomplete="on" required autofocus>
                @error('name') <span class="text-red-500 font-medium">{{ $message }}</span> @enderror
            </div>

            <div class="flex-1">
                <label for="date">Fecha</label>
                <input type="datetime-local" wire:model="date" id="date"
                       class="w-full border-gray-300 rounded-md" required>
                @error('date') <span class="text-red-500 font-medium">{{ $message }}</span> @enderror
            </div>

            <div class="flex-1">
                <label for="status">Estado</label>
                <select wire:model="status" id="status"
                        class="w-full border-gray-300 rounded-md" required>
                    <option value="">Seleccionar...</option>
                    <option value="Realizada" class="bg-green-500">Realizada</option>
                    <option value="Pendiente" class="bg-red-500">Pendiente</option>
                    <option value="Imprevisto" class="bg-yellow-500">Imprevisto</option>
                </select>
                @error('status') <span class="text-red-500 font-medium">{{ $message }}</span> @enderror
            </div>

            <div class="flex-none">
                <button type="submit" class="bg-black text-white rounded-md mt-6 p-2">Añadir</button>
            </div>
        </div>
    </form>
</div>

内容的提问来源于stack exchange,提问作者Juan Ballesteros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:28:09