File tree Expand file tree Collapse file tree 3 files changed +61
-0
lines changed
Expand file tree Collapse file tree 3 files changed +61
-0
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ ' preact-render-to-string ' : minor
3+ ---
4+
5+ Add support for ` dangerouslySetInnerHTML ` on Fragments. This allows you to insert unsafe raw HTML content without a wrapping container element.
Original file line number Diff line number Diff line change @@ -346,6 +346,9 @@ function _renderToString(
346346 // Fragments are the least used components of core that's why
347347 // branching here for comments has the least effect on perf.
348348 return '<!--' + encodeEntities ( props . UNSTABLE_comment ) + '-->' ;
349+ } else if ( props . dangerouslySetInnerHTML ) {
350+ let html = props . dangerouslySetInnerHTML . __html || '' ;
351+ return '<!--$h-->' + html + '<!--/$h-->' ;
349352 }
350353
351354 rendered = props . children ;
Original file line number Diff line number Diff line change @@ -857,6 +857,59 @@ describe('render', () => {
857857 ) ;
858858 expect ( rendered ) . to . equal ( '<div>foo</div>' ) ;
859859 } ) ;
860+
861+ it ( 'should support dangerouslySetInnerHTML on Fragments' , ( ) => {
862+ let rendered = render (
863+ < div >
864+ foo
865+ < Fragment dangerouslySetInnerHTML = { { __html : 'bar' } } />
866+ baz
867+ </ div >
868+ ) ;
869+ expect ( rendered ) . to . equal ( '<div>foo<!--$h-->bar<!--/$h-->baz</div>' ) ;
870+ } ) ;
871+
872+ it ( 'should ignore children on Fragments with dangerouslySetInnerHTML' , ( ) => {
873+ let rendered = render (
874+ < div >
875+ foo
876+ < Fragment dangerouslySetInnerHTML = { { __html : 'bar' } } >
877+ < p > ignored</ p >
878+ </ Fragment >
879+ baz
880+ </ div >
881+ ) ;
882+ expect ( rendered ) . to . equal ( '<div>foo<!--$h-->bar<!--/$h-->baz</div>' ) ;
883+ } ) ;
884+
885+ it ( 'should support falsy dangerouslySetInnerHTML on Fragments' , ( ) => {
886+ let rendered = render (
887+ < div >
888+ foo
889+ < Fragment dangerouslySetInnerHTML = { { __html : null } } />
890+ baz
891+ </ div >
892+ ) ;
893+ expect ( rendered ) . to . equal ( '<div>foo<!--$h--><!--/$h-->baz</div>' ) ;
894+
895+ rendered = render (
896+ < div >
897+ foo
898+ < Fragment dangerouslySetInnerHTML = { { __html : undefined } } />
899+ baz
900+ </ div >
901+ ) ;
902+ expect ( rendered ) . to . equal ( '<div>foo<!--$h--><!--/$h-->baz</div>' ) ;
903+
904+ rendered = render (
905+ < div >
906+ foo
907+ < Fragment dangerouslySetInnerHTML = { { __html : false } } />
908+ baz
909+ </ div >
910+ ) ;
911+ expect ( rendered ) . to . equal ( '<div>foo<!--$h--><!--/$h-->baz</div>' ) ;
912+ } ) ;
860913 } ) ;
861914
862915 describe ( 'className / class massaging' , ( ) => {
You can’t perform that action at this time.
0 commit comments