File tree Expand file tree Collapse file tree 3 files changed +33
-4
lines changed
Expand file tree Collapse file tree 3 files changed +33
-4
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ ' preact-render-to-string ' : patch
3+ ---
4+
5+ Fix invalid parent pointer empty value when rendering a suspended vnode
Original file line number Diff line number Diff line change @@ -425,7 +425,7 @@ function _renderToString(
425425 return str ;
426426 } finally {
427427 if ( afterDiff ) afterDiff ( vnode ) ;
428- vnode [ PARENT ] = undefined ;
428+ vnode [ PARENT ] = null ;
429429
430430 if ( ummountHook ) ummountHook ( vnode ) ;
431431 }
@@ -453,7 +453,7 @@ function _renderToString(
453453 const str = renderChildren ( ) ;
454454
455455 if ( afterDiff ) afterDiff ( vnode ) ;
456- vnode [ PARENT ] = undefined ;
456+ vnode [ PARENT ] = null ;
457457
458458 if ( ummountHook ) ummountHook ( vnode ) ;
459459
@@ -618,7 +618,7 @@ function _renderToString(
618618 }
619619
620620 if ( afterDiff ) afterDiff ( vnode ) ;
621- vnode [ PARENT ] = undefined ;
621+ vnode [ PARENT ] = null ;
622622 if ( ummountHook ) ummountHook ( vnode ) ;
623623
624624 // Emit self-closing tag for empty void elements:
Original file line number Diff line number Diff line change 11import { renderToStringAsync } from '../../src/index.js' ;
22import { h } from 'preact' ;
3- import { Suspense } from 'preact/compat' ;
3+ import { Suspense , useId } from 'preact/compat' ;
44import { expect } from 'chai' ;
55import { createSuspender } from '../utils.js' ;
66
@@ -165,4 +165,28 @@ describe('Async renderToString', () => {
165165
166166 expect ( msg ) . to . equal ( 'fail' ) ;
167167 } ) ;
168+
169+ it ( 'should support hooks' , async ( ) => {
170+ const { suspended, getResolved } = createSuspender ( ) ;
171+
172+ function Suspender ( ) {
173+ const id = useId ( ) ;
174+
175+ if ( ! getResolved ( ) ) {
176+ throw suspended . promise ;
177+ }
178+
179+ return < p > { typeof id === 'string' ? 'ok' : 'fail' } </ p > ;
180+ }
181+
182+ const promise = renderToStringAsync (
183+ < Suspense fallback = { < div > loading...</ div > } >
184+ < Suspender />
185+ </ Suspense >
186+ ) ;
187+
188+ suspended . resolve ( ) ;
189+ const rendered = await promise ;
190+ expect ( rendered ) . to . equal ( '<p>ok</p>' ) ;
191+ } ) ;
168192} ) ;
You can’t perform that action at this time.
0 commit comments