Enhance component interactivity with wire:poll.keep-alive in Laravel Livewire v3

Real-time updates are essential for applications that require continuous data refreshes, such as dashboards and live feeds. Laravel Livewire v3 introduces the wire:poll.keep-alive directive, which maintains the component state during polling, ensuring consistent real-time updates without resetting the component state.

Understanding wire:poll.keep-alive

The wire:poll.keep-alive directive allows you to poll a method at specified intervals while maintaining the component's state. This is particularly useful for scenarios where you need to keep updating data without resetting or re-rendering the entire component.

Basic Usage

Here’s a basic example to illustrate how wire:poll.keep-alive works:

<div wire:poll.keep-alive.10s="refreshData">
    <!-- Your component content -->
</div>

In this example, the refreshData method in your Livewire component is called every 10 seconds, ensuring the data is kept up-to-date without resetting the component's state.

Real-Life Example

Consider a scenario where you have a live sports score dashboard that needs to update scores in real-time. You want to ensure that the component state, such as user settings or filters, remains unchanged during updates. Here’s how you can implement this using wire:poll.keep-alive:

use Livewire\Component;

class LiveScores extends Component
{
    public $scores;
    public $filter;

    public function mount()
    {
        $this->filter = 'all';
        $this->refreshData();
    }

    public function refreshData()
    {
        // Fetch the latest scores based on the filter
        $this->scores = ScoreFetcher::getLatestScores($this->filter);
    }

    public function setFilter($filter)
    {
        $this->filter = $filter;
        $this->refreshData();
    }

    public function render()
    {
        return view('livewire.live-scores');
    }
}
<!-- Blade Template (livewire/live-scores.blade.php) -->
<div wire:poll.keep-alive.10s="refreshData">
    <h1>Live Scores</h1>

    <div>
        <button wire:click="setFilter('all')">All</button>
        <button wire:click="setFilter('favorites')">Favorites</button>
    </div>

    <ul>
        @foreach($scores as $score)
            <li>{{ $score->teamA }} vs {{ $score->teamB }}: {{ $score->score }}</li>
        @endforeach
    </ul>
</div>

In this example, the live scores are updated every 10 seconds, but the component state, such as the selected filter, remains unchanged. This ensures that the user settings or filters are preserved during the data refreshes.

Conclusion

The wire:poll.keep-alive directive in Laravel Livewire v3 is a powerful tool for maintaining component state during real-time updates. By leveraging this feature, you can ensure consistent and seamless data updates without resetting the component state. Give wire:poll.keep-alive a try in your next Laravel Livewire project and see how it can enhance your application's real-time capabilities.

Subscribe to Harris Raftopoulos

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe