diff --git a/lib/dom.js b/lib/dom.js index 1760293..2d62c62 100644 --- a/lib/dom.js +++ b/lib/dom.js @@ -21,6 +21,13 @@ function dom (tag, props, ...children) { } break; + case 'boolean': + if (!child) { + children.splice(i, 1) + break; + } + /* fallthrough */ + default: throw new Error(`Invalid child node: ${child}`) } diff --git a/test/unit/dom.test.js b/test/unit/dom.test.js index 8a1b52e..8f2bfbf 100644 --- a/test/unit/dom.test.js +++ b/test/unit/dom.test.js @@ -52,17 +52,13 @@ describe('etch.dom', () => { expect(component.element.outerHTML).to.equal('<svg><circle></circle></svg>') }) - it('ignores nulls passed in the place of children, but throws an error if other invalid values are passed', () => { + it('ignores nulls and false passed in the place of children, but throws an error if other invalid values are passed', () => { const element = etch.render( - <div><span/>{null}<p/></div> + <div><span/>{null}{false}<p/></div> ); expect(Array.from(element.children).map(c => c.tagName)).to.eql(['SPAN', 'P']) - expect(() => etch.render( - <div>{false}</div> - )).to.throw('Invalid child node: false') - expect(() => etch.render( <div>{undefined}</div> )).to.throw('Invalid child node: undefined')