Skip to content

Commit b92ba83

Browse files
author
TOGASHI Tomoki
authored
prevent to self-close if dangerouslySetInnerHTML set (#174)
1 parent b6e1463 commit b92ba83

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,13 +351,13 @@ function renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
351351
}
352352
}
353353

354-
if (pieces.length) {
354+
if (pieces.length || html) {
355355
s += pieces.join('');
356356
} else if (opts && opts.xml) {
357357
return s.substring(0, s.length - 1) + ' />';
358358
}
359359

360-
if (isVoid && !children) {
360+
if (isVoid && !children && !html) {
361361
s = s.replace(/>$/, ' />');
362362
} else {
363363
if (pretty && ~s.indexOf('\n')) s += '\n';

test/render.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,15 @@ describe('render', () => {
228228
expect(rendered).to.equal(expected);
229229
});
230230

231+
it('should not self-close void elements if it has dangerouslySetInnerHTML prop', () => {
232+
let rendered = render(
233+
<link dangerouslySetInnerHTML={{ __html: '<foo>' }} />
234+
),
235+
expected = `<link><foo></link>`;
236+
237+
expect(rendered).to.equal(expected);
238+
});
239+
231240
it('should serialize object styles', () => {
232241
let rendered = render(<div style={{ color: 'red', border: 'none' }} />),
233242
expected = `<div style="color: red; border: none;"></div>`;
@@ -814,6 +823,15 @@ describe('render', () => {
814823
expect(renderXml(<a>b</a>)).to.equal(`<a>b</a>`);
815824
});
816825

826+
it('should not self-close if it has dangerouslySetInnerHTML prop', () => {
827+
expect(
828+
renderXml(<a dangerouslySetInnerHTML={{ __html: 'b' }} />)
829+
).to.equal(`<a>b</a>`);
830+
expect(
831+
renderXml(<a dangerouslySetInnerHTML={{ __html: '<b />' }} />)
832+
).to.equal(`<a><b /></a>`);
833+
});
834+
817835
it('should render boolean attributes with named values', () => {
818836
expect(renderXml(<div foo bar />)).to.equal(
819837
`<div foo="foo" bar="bar" />`

0 commit comments

Comments
 (0)