Description
Currently we allow arbitrary text content to flow amongst tags. However, we have noticed that while building UIs, you actually don't utilize this very much. @syranide can speak more to this.
You usually want to wrap your text content in some other container. E.g. instead of writing it like this:
<div> Foo <Button /> </div>
You should write something like this:
<div> <Label text="Foo" /> <Button /> </div>
At the very least you want to wrap it for internationalization purposes:
<div> <Intl message="Foo" desc="A label" /> <Button /> </div>
What if we only treated it as a sequence of expressions and got rid of the curlies? We don't really need curlies around attributes since they can disambiguated with parenthesis if necessary.
That way the JSX example would become:
var box =
<Box>
shouldShowAnswer(user) ?
<Answer value=false>"no"</Answer> :
<Box.Comment>
"Text Content"
</Box.Comment>
</Box>;
No curlies!
Multiple JSXChildren have to be delimitated by ,
. A JSX elements doesn't need to be followed by a comma.
var box =
<Box>
"Leading text",
functionCall(),
<Answer value={'this is': 'an object'}>"yes"</Answer>
<Box.Comment><Child /></Box.Comment>
anotherFunctionCall(),
<OptionalTrailingComma />,
(expr + ession)
</Box>;
This moves the design further away from HTML generation and towards UI composition.