Server Side Rendering (SSR)
export class AppModule {
private transferStateKey = makeStateKey(TRANSFER_STATE_KEY);
constructor(
private store: Store<MarketplaceState>,
private platform: PlatformService,
private transferState: TransferState,
private dataStrategy: DataStrategy,
) {
if (!this.platform.isBrowser) {
this.saveState();
} else {
this.loadState();
}
}
private saveState() {
this.store.pipe(takeWhile(() => !this.platform.isBrowser)).subscribe((state) => {
this.transferState.set(this.transferStateKey, this.dataStrategy.toJS(state));
});
}
private loadState() {
if (!this.transferState.hasKey(this.transferStateKey)) {
return;
}
const state = this.transferState.get(this.transferStateKey, {} as any);
this.store.update((s) => {
this.dataStrategy.merge(s, state, [], true);
s.dataRestoredFromSSR = true;
});
this.removeRestoredFromSSRFlag();
}
private removeRestoredFromSSRFlag() {
document.addEventListener('readystatechange', (event: any) => {
if (event.target.readyState === 'complete') {
this.store.update((s) => {
s.dataRestoredFromSSR = false;
});
document.removeEventListener('readystatechange', (_) => {});
}
});
}
}Last updated