committed by
Connor McSheffrey
2 changed files with 67 additions and 0 deletions
@ -0,0 +1,31 @@ |
|||||
|
--- |
||||
|
id: if-else-in-JSX-tip |
||||
|
title: If-Else in JSX |
||||
|
layout: docs |
||||
|
permalink: inline-styles.html |
||||
|
script: "cookbook/inline-styles.js" |
||||
|
--- |
||||
|
|
||||
|
`if-else` statements don't work inside JSX, since JSX is really just sugar for functions: |
||||
|
|
||||
|
```html |
||||
|
/** @jsx React.DOM */ |
||||
|
|
||||
|
// this |
||||
|
React.renderComponent(<div id="msg">Hello World!</div>, mountNode); |
||||
|
// is the same as this |
||||
|
React.renderComponent(React.DOM.div({id:"msg"}, "Hello World!"), mountNode); |
||||
|
``` |
||||
|
|
||||
|
Which means `<div id={if (true){ 'msg' }}>Hello World!</div>` doesn't make sense, as (if it worked) it would be compiled down to something like this `React.DOM.div({id: if (true){ 'msg' }}, "Hello World!")`, which isn't valid JS. |
||||
|
|
||||
|
What you're searching for is ternary expression: |
||||
|
|
||||
|
```html |
||||
|
/** @jsx React.DOM */ |
||||
|
|
||||
|
// this |
||||
|
React.renderComponent(<div id={true ? 'msg' : ''}>Hello World!</div>, mountNode); |
||||
|
``` |
||||
|
|
||||
|
Try the [JSX compiler](http://facebook.github.io/react/jsx-compiler.html) to see how this works. It's a very simple transformation, thus making JSX entirely optional to use with React. |
@ -0,0 +1,36 @@ |
|||||
|
--- |
||||
|
id: if-else-in-JSX |
||||
|
title: If-Else in JSX |
||||
|
layout: docs |
||||
|
permalink: inline-styles.html |
||||
|
script: "cookbook/inline-styles.js" |
||||
|
--- |
||||
|
|
||||
|
### Problem |
||||
|
You want to use conditional in JSX. |
||||
|
|
||||
|
### Solution |
||||
|
Don't forget that JSX is really just sugar for functions: |
||||
|
|
||||
|
```html |
||||
|
/** @jsx React.DOM */ |
||||
|
|
||||
|
// this |
||||
|
React.renderComponent(<div id="msg">Hello World!</div>, mountNode); |
||||
|
// is the same as this |
||||
|
React.renderComponent(React.DOM.div({id:"msg"}, "Hello World!"), mountNode); |
||||
|
``` |
||||
|
|
||||
|
Which means `<div id={if (true){ 'msg' }}>Hello World!</div>` doesn't make sense, as (if it worked) it would be compiled down to something like this `React.DOM.div({id: if (true){ 'msg' }}, "Hello World!")`, which isn't valid JS. |
||||
|
|
||||
|
What you're searching for is ternary expression: |
||||
|
|
||||
|
```html |
||||
|
/** @jsx React.DOM */ |
||||
|
|
||||
|
// this |
||||
|
React.renderComponent(<div id={true ? 'msg' : ''}>Hello World!</div>, mountNode); |
||||
|
``` |
||||
|
|
||||
|
### Discussion |
||||
|
Try the [JSX compiler](http://facebook.github.io/react/jsx-compiler.html) to see how this works. It's a very simple transformation, thus making JSX entirely optional to use with React. |
Loading…
Reference in new issue