JSX中常用的几个概念

254 阅读2分钟

      编写稍微复杂的JSX, 就要使用到下面的一些概念。只要理解了这些,再复杂的结构也都会非常的游刃有余。

1、求值表达式

要使用 JavaScript 表达式作为属性值,只需把这个表达式用一对大括号 ( { } ) 包起来,不要用引号 ( " " )。在编写JSX时,在 { } 中不能使用语句(if语句、for语句等等),但可以使用求值表达式,这本身与 JSX没有多大关系,是JS中的特性,它是会返回值的表达式。我们不能直接使用语句,但可以把语句包裹在函数求值表达式中运用。

2、条件判断的写法

你没法在JSX中使用 if-else 语句,因为 JSX 只是函数调用和对象创建的语法糖。在 { } 中使用,是不合法的JS代码,不过可以采用三元操作表达式

 

var  HelloMessage = React .createClass({

render:  function () {

return  <div> Hello {this. props.name  ? this. props.name  : "World"} </div> ;

}

});

ReactDOM. render(< HelloMessage name ="xiaowang"  />, document .body);

 

可以使用比较运算符“ || ”来书写,如果左边的值为真,则直接返回左边的值,否则返回右边的值,与if 的效果相同。

var  HelloMessage = React .createClass({

render:  function () {

return  <div> Hello {this. props.name  || "World"} </div> ;

}

});

3、函数表达式

()有强制运算的作用

var  HelloMessage = React .createClass({

render:  function () {

return  <div> Hello {

(function  (obj) {

if ( obj.props .name)

return  obj.props .name

else

return  "World"

}( this))

} </div >;

}

});

ReactDOM .render (< HelloMessage  name= "xiaowang"  />, document. body);

 

外括号“ )”放在外面和里面都可以执行。唯一的区别是括号放里面执行完毕拿到的是函数的引用,然后再调用 “function(){}(this)()”;括号放在外面的时候拿到的事返回值。

4、数组递归

数组循环,数组的每个元素都返回一个React 组件。

var  lis  = this .todoList .todos .map (function  (todo ) {

return  (

< li>

< input  type= "checkbox"  checked={ todo. done} >

< span  className={ 'done-' + todo. done} >{ todo. text} </span >

</ li>

);

});

 

var ul = (

< ul  className= "unstyled">

{ lis}

</ ul>

);