Here's how false renders in different situations:
Renders as id="false":
ReactDOM.render(<div id={false} />, mountNode);
String "false" as input value:
ReactDOM.render(<input value={false} />, mountNode);
No child:
ReactDOM.render(<div>{false}</div>, mountNode);
The reason why this one doesn't render as the string "false" as a div child is to allow the more common use-case: <div>{x > 1 && 'You have more than one item'}</div>.