anthonyshort / deku

Render interfaces using pure functions and virtual DOM
https://github.com/anthonyshort/deku/tree/master/docs
3.41k stars 130 forks source link

TypeError when vnode.children is an array of text nodes #368

Closed maxkueng closed 8 years ago

maxkueng commented 8 years ago

I'm trying a very simple example without JSX but I keep getting an error when there is a text node.

Am I doing it wrong?

error

Doesn't work:

var dom = require('deku').dom;
var element = require('deku').element;
var createRenderer = dom.createRenderer;
var render = createRenderer(document.querySelector('#content'));

render(element('div', {
  class: "greeting"
}, [
  element('span', {}, ['Hello'])
]));

Works:

var dom = require('deku').dom;
var element = require('deku').element;
var createRenderer = dom.createRenderer;
var render = createRenderer(document.querySelector('#content'));

render(element('div', {
  class: "greeting"
}, [
  element('span') // <-- no "Hello" text
]));
maxkueng commented 8 years ago

This works too. "Hello" is not in an array.

var dom = require('deku').dom;
var element = require('deku').element;
var createRenderer = dom.createRenderer;
var render = createRenderer(document.querySelector('#content'));

render(element('div', {
  class: "greeting"
}, [
  element('span', {}, 'Hello') // <-- "Hello" not in array.
]));
maxkueng commented 8 years ago

Yay! Closing manually as GitHub didn't catch the fix in the commit message. d0b5810

anthonyshort commented 8 years ago

I'll get a release out in a sec, just fixing CI :)

maxkueng commented 8 years ago

So awesome! :100: :sparkles: Now deku works with hyperx.

var hyperx = require('hyperx');
var dom = require('deku').dom;
var element = require('deku').element;
var createRenderer = dom.createRenderer;
var hx = hyperx(element);

var render = createRenderer(document.querySelector('#content'));

render(hx`<div class="greeting">
  <span>Hello</span>
</div>`);

Thanks!

anthonyshort commented 8 years ago

Nice! I'd love to get some docs for this to show an alternative to JSX. Looks really nice.