Skip to content

HandleComponents

Magewire specific (since: 3.0.0)

HandleComponents (sort order 1100) is the heart of the pipeline. It runs a component's lifecycle and owns the snapshot: the serialisable representation of a component's state that travels between the server and the browser.

Where ResolveComponents decides which component a block becomes, HandleComponents decides what happens to it: boot, mount or hydrate, apply updates, render, dehydrate.

What it does

Operation Method When
Mount mount($name, $params, $key, $block, $component) Initial render: build a fresh component and run mount().
Update update($snapshot, $updates, $calls, $block) An XHR update: restore from snapshot, apply property updates and method calls, re-render.
From snapshot fromSnapshot($snapshot, $block) Rebuild a component instance from an incoming snapshot.
Snapshot snapshot($component, $context) Dehydrate a component into a Snapshot.
Update a property updateProperty($component, $path, $value, $context) Apply a single incoming property change (public properties only).

Each operation runs the lifecycle events other parts of the framework hook into: mount, hydrate, update, call, render, dehydrate (see Component Hooks and Lifecycle Hooks).

The snapshot

A Snapshot is three things:

Part Holds
data The component's public property values (dehydrated through synthesizers).
memo Metadata needed to reconstruct the component: name, id, resolver accessor, layout handles, feature flags.
checksum An integrity hash over data + memo.

On every update the incoming snapshot's checksum is verified before anything else runs. If it doesn't match, the payload was tampered with and the request is rejected (CorruptComponentPayloadException). This is why public properties are safe to round-trip but must not be trusted blindly: see Locked properties / security.

Synthesizers

Property values aren't always plain scalars. Synthesizers teach HandleComponents how to dehydrate and hydrate richer types: arrays, \stdClass, backed enums, and Magento's \Magento\Framework\DataObject. Each public property is matched to a synth during snapshot and restore.

Register your own by adding it to the synthesizers argument of the mechanism in DI:

etc/frontend/di.xml
<type name="Magewirephp\Magewire\Mechanisms\HandleComponents\HandleComponents">
    <arguments>
        <argument name="synthesizers" xsi:type="array">
            <item name="my_type" xsi:type="string">
                Vendor\Module\Magewire\Synthesizers\MyTypeSynth
            </item>
        </argument>
    </arguments>
</type>

See Synthesizers for writing one.