Skip to content

:prop Bindings Do Not Push Updates After Hydration #7323

@mcritzjam

Description

@mcritzjam

🐛 Bug Report

After client-side hydration, structural template directives (<f-when>,
<f-repeat>) and property bindings (:prop) do not re-evaluate when their
underlying @observable properties change. Simple {{interpolation}} and
attribute bindings DO work reactively, creating an inconsistency that forces
app developers into imperative DOM workarounds.

💻 Repro or Code Sample

Field Detail
Expected <child-display :message="{{parentMessage}}"> updates the child's message property when parentMessage changes.
Actual The child receives the initial value during SSR but the binding does not propagate subsequent changes. The parent's {{parentMessage}} interpolation DOES update.
Root cause Property bindings (:prop) perform a one-time assignment during hydration but do not establish ongoing subscriptions like FAST Element's :prop="${x => x.value}" arrow-function bindings.
Affected apps settings_btr (page data propagation), any BTR app passing data between parent and child components via :prop.
Severity P1 — Broken functionality. Parent-to-child data flow is a fundamental component communication pattern.
Workaround Fresh element creation — replace the child element entirely. See Workaround C.
Suggested fix Framework-level: :prop bindings should establish ongoing subscriptions during hydration, identical to FAST Element's runtime property binding behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions