UNPKG

@ima/react-page-renderer

Version:

IMA.js React page renderer.

44 lines (43 loc) 1.57 kB
import { RendererEvents } from '@ima/core'; import { createRoot, hydrateRoot } from 'react-dom/client'; import { AbstractClientPageRenderer } from './AbstractClientPageRenderer'; /** * Client-side page renderer. The renderer attempts to reuse the markup sent by * server if possible. */ export class ClientPageRenderer extends AbstractClientPageRenderer { _reactRoot; unmount() { if (this._reactRoot) { this._reactRoot.unmount(); this._reactRoot = undefined; this._runUnmountCallback(); } super.unmount(); } _hydrateViewAdapter() { const serverNode = this._viewContainer?.cloneNode(true); this._reactRoot = hydrateRoot(this._viewContainer, this._getViewAdapterElement({ refCallback: this._getHydrateCallback() }), { onRecoverableError: (error)=>{ if ($Debug) { console.error('onRecoverableError', error); } this._dispatcher.fire(RendererEvents.HYDRATE_ERROR, { error, serverNode, clientNode: this._viewContainer?.cloneNode(true) }); } }); } _renderViewAdapter(callback, props) { if (!this._reactRoot) { this._reactRoot = createRoot(this._viewContainer); } this._reactRoot.render(this._getViewAdapterElement(Object.assign({}, props, { refCallback: callback }))); } } //# sourceMappingURL=ClientPageRenderer.js.map