How to fill suburbs from selected city?

I have a filter form where all of the fields are wire:model.defer with the Filter button triggering a search action. I want to have some dynamic action though when I select a city from a select field to load all the suburbs from that city in another select field. I managed to to this using AlpineJS:

                <div x-data>
                    <select wire:model.defer="cityId" class="form-row" id="cities" @change="$wire.loadSuburbs($">
                        @foreach ($cities as $index => $city)
                            <option value="{{ $city['id'] }}">{{ $city['name'] }}</option>

But the issue is, after the suburbs dropdown is updated the component is rerendered and the search is executed again with the new city id. I want only my suburbs dropdown to get filled in after the component is rerendered and search executed only if I explicitly hit the FIlter button.

How is that possible?

I ended up doing this:

                    <input type="hidden" id="selected-city-id" value="{{ $cityId }}" />
                    <select wire:model.defer="cityId" class="form-row" id="cities" @change="$wire.loadSuburbs($, document.getElementById('selected-city-id').value)">
                        @foreach ($cities as $index => $city)
                            <option value="{{ $city['id'] }}">{{ $city['name'] }}</option>

public function loadSuburbs($cityId, $oldCityId)
    $this->suburbs = getSuburbs($cityId);

So this actually rerenders the page again but with the oldCityId so results appear to be the same until you hit the Filter button explicitly. Not sure if there is alternative to this hacky solution.

Any tips in my article here:

its essentially the same requirement