File tree 3 files changed +33
-4
lines changed
Filter options
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(
425
425
return str ;
426
426
} finally {
427
427
if ( afterDiff ) afterDiff ( vnode ) ;
428
- vnode [ PARENT ] = undefined ;
428
+ vnode [ PARENT ] = null ;
429
429
430
430
if ( ummountHook ) ummountHook ( vnode ) ;
431
431
}
@@ -453,7 +453,7 @@ function _renderToString(
453
453
const str = renderChildren ( ) ;
454
454
455
455
if ( afterDiff ) afterDiff ( vnode ) ;
456
- vnode [ PARENT ] = undefined ;
456
+ vnode [ PARENT ] = null ;
457
457
458
458
if ( ummountHook ) ummountHook ( vnode ) ;
459
459
@@ -618,7 +618,7 @@ function _renderToString(
618
618
}
619
619
620
620
if ( afterDiff ) afterDiff ( vnode ) ;
621
- vnode [ PARENT ] = undefined ;
621
+ vnode [ PARENT ] = null ;
622
622
if ( ummountHook ) ummountHook ( vnode ) ;
623
623
624
624
// Emit self-closing tag for empty void elements:
Original file line number Diff line number Diff line change 1
1
import { renderToStringAsync } from '../../src/index.js' ;
2
2
import { h } from 'preact' ;
3
- import { Suspense } from 'preact/compat' ;
3
+ import { Suspense , useId } from 'preact/compat' ;
4
4
import { expect } from 'chai' ;
5
5
import { createSuspender } from '../utils.js' ;
6
6
@@ -165,4 +165,28 @@ describe('Async renderToString', () => {
165
165
166
166
expect ( msg ) . to . equal ( 'fail' ) ;
167
167
} ) ;
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
+ } ) ;
168
192
} ) ;
You can’t perform that action at this time.
0 commit comments