Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add client-side hydration support to FASTElement #5577

Open
1 of 2 tasks
nicholasrice opened this issue Feb 9, 2022 · 0 comments
Open
1 of 2 tasks

Add client-side hydration support to FASTElement #5577

nicholasrice opened this issue Feb 9, 2022 · 0 comments
Labels
area:ssr Pertains to SSR. feature A new feature status:planned Work is planned
Milestone

Comments

@nicholasrice
Copy link
Contributor

nicholasrice commented Feb 9, 2022

details: #5182

Dependent features:

@nicholasrice nicholasrice added the status:triage New Issue - needs triage label Feb 9, 2022
@EisenbergEffect EisenbergEffect added area:ssr Pertains to SSR. feature A new feature status:planned Work is planned and removed status:triage New Issue - needs triage labels Feb 9, 2022
@EisenbergEffect EisenbergEffect added this to the SSR 1.0 milestone Feb 9, 2022
@EisenbergEffect EisenbergEffect moved this from Backlog to Todo in FAST Architecture Roadmap Feb 9, 2022
@EisenbergEffect EisenbergEffect changed the title feat (SSR): add client-side hydration support to FASTElement Add client-side hydration support to FASTElement Feb 9, 2022
@EisenbergEffect EisenbergEffect self-assigned this Feb 9, 2022
@EisenbergEffect EisenbergEffect moved this from Todo to Backlog in FAST Architecture Roadmap Feb 10, 2022
@EisenbergEffect EisenbergEffect removed their assignment Jun 22, 2022
janechu pushed a commit that referenced this issue Jul 5, 2024
Adds support for FASTElement hydration

# Pull Request

## 📖 Description

This PR consolidates Server-Side Rendering (SSR) related changes made by @nicholasrice from a Microsoft internal fork. Below is the commit description from the original PR.

---

This PR enables hydration of FAST custom elements from HTML emitted by SSR processes.

**This PR has three core areas:**

1. I've added a SSR example application to `/examples` to aid in debugging. This code was ported from external FAST.
2. I've updated `fast-ssr` to accept a `emitHydratableMarkup` attribute. Configuring this option causes markers to be emitted during template rendering. These markers manifest either as element attributes (for attribute bindings / directives) and HTML comments (for content bindings / directives). These markers are used by `fast-element` to identify which elements belong to which views and bindings.
3. `fast-element` has been updated to support hydrating views, details below.

**fast-element changes:**

1. Updated `HydratableElementController` to invoke `hydrate` on it's template during connection, also refactored `ElementController` base class to allow better direct extension by making `private` properties `protected`.
2. Added a `HydrationView` class. An instance of this class represents a region of DOM created by a template during the SSR process. When this class binds for the first time, it walks the DOM tree between it's first and last nodes looking for binding markers emitted during `fast-ssr` rendering. When it finds binding markers, it associates the template binding to that DOM location. After all the nodes have been walked and the bindings targeted, behaviors for those bindings are created and bound, hooking up observable behavior.
3. Updated bindings and directives to handle hydration scenarios. Unfortunately, I was not able to identify a good way to separate the hydration behavior from the CSR binding behavior without implementing a large amount of code duplication. Instead, I added a lightweight `isHydratable()` test to determine whether bindings should go through hydration flows. Bindings and directives were then updated to not affect DOM during hydration flows.


### 🎫 Issues

* #5182
* #5577

## 👩‍💻 Reviewer Notes

<!---
Provide some notes for reviewers to help them provide targeted feedback and testing.

Do you recommend a smoke test for this PR? What steps should be followed?
Are there particular areas of the code the reviewer should focus on?
-->

## 📑 Test Plan

<!---
Please provide a summary of the tests affected by this work and any unique strategies employed in testing the features/fixes.
-->

## ✅ Checklist

### General

<!--- Review the list and put an x in the boxes that apply. -->

- [x] I have included a change request file using `$ yarn change`
- [x] I have added tests for my changes.
- [x] I have tested my changes.
- [ ] I have updated the project documentation to reflect my changes.
- [ ] I have read the [CONTRIBUTING](https://github.com/microsoft/fast/blob/master/CONTRIBUTING.md) documentation and followed the [standards](https://github.com/microsoft/fast/blob/master/CODE_OF_CONDUCT.md#our-standards) for this project.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:ssr Pertains to SSR. feature A new feature status:planned Work is planned
Projects
Status: Backlog
Development

No branches or pull requests

2 participants