Skip to content

Commit 9052a8d

Browse files
authored
Merge pull request #7810 from QwikDev/v2-innerhtml-falsy-value
fix: handle falsy value for dangerouslySetInnerHTML
2 parents d4b426b + 01c35f8 commit 9052a8d

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

.changeset/tasty-turkeys-stand.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@qwik.dev/core': patch
3+
---
4+
5+
fix: handle falsy value for dangerouslySetInnerHTML

packages/qwik/src/core/client/vnode-diff.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,8 +655,10 @@ export const vnode_diff = (
655655
}
656656

657657
if (key === dangerouslySetInnerHTML) {
658-
element.innerHTML = value as string;
659-
element.setAttribute(QContainerAttr, QContainerValue.HTML);
658+
if (value) {
659+
element.innerHTML = String(value);
660+
element.setAttribute(QContainerAttr, QContainerValue.HTML);
661+
}
660662
continue;
661663
}
662664

packages/qwik/src/core/tests/component.spec.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,27 @@ describe.each([
641641
);
642642
});
643643

644+
it('should handle falsy values in dangerouslySetInnerHTML', async () => {
645+
const Cmp = component$(() => {
646+
return (
647+
<main>
648+
<div dangerouslySetInnerHTML={undefined}></div>
649+
<div dangerouslySetInnerHTML={null!}></div>
650+
{/* @ts-ignore-next-line */}
651+
<div dangerouslySetInnerHTML={false}></div>
652+
</main>
653+
);
654+
});
655+
const { document } = await render(<Cmp />, { debug });
656+
await expect(document.querySelector('main')).toMatchDOM(
657+
<main>
658+
<div></div>
659+
<div></div>
660+
<div></div>
661+
</main>
662+
);
663+
});
664+
644665
it('should render textarea value', async () => {
645666
const Cmp = component$(() => {
646667
const signal = useSignal('value 123');

packages/qwik/src/server/ssr-container.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,9 +1089,11 @@ class SSRContainer extends _SharedContainer implements ISSRContainer {
10891089
}
10901090

10911091
if (key === dangerouslySetInnerHTML) {
1092-
innerHTML = String(value);
1093-
key = QContainerAttr;
1094-
value = QContainerValue.HTML;
1092+
if (value) {
1093+
innerHTML = String(value);
1094+
key = QContainerAttr;
1095+
value = QContainerValue.HTML;
1096+
}
10951097
// we can skip this attribute for a style node
10961098
// because we skip materializing the style node
10971099
if (tag === 'style') {

0 commit comments

Comments
 (0)