React之JSX

2017-01-12  本文已影响33人  天外来人

什么是JSX

React的核心机制之一就是虚拟DOM:可以在内存中创建虚拟的DOM元素。React利用虚拟DOM来减少对实际DOM的操作从而提升性能。当然,虚拟DOM也可以通过JavaScript来创建,例如:

var child1 = React.createElement('li', null, 'First');
var child2 = React.createElement('li', null, 'Second');

createElement语法:

ReactElement createElement(
  string/ReactClass type,
  [object props],
  [children ...]
)
创建并返回一个新的指定类型的ReactElement。type  参数可以是一个html标签名字符串(如:"div","span"等),或者是ReactClass(通过React.createClass 创建的)。

使用这样的机制,我们完全可以用JavaScript构建完整的界面DOM树,正如我们可以用JavaScript创建真实DOM。但是,这样的代码可读性差,于是React发明了JSX, 利用我们熟悉的HTML语法来创建虚拟的DOM:

var root = (
  <ul>
    <li>First</li>
    <li>Secont</li>
  </ul>
);

这两段代码是完全等价的,后者将XML语法直接加入到JavaScript代码中,让你能够高效的通过代码而不是模板来定义界面。之后JSX通过翻译器转换到纯JavaScript再由浏览器执行。
因此,JSX本身并不是什么高深的技术,可以说只是一个比较高级但很直观的语法糖。它非常有用,却不是一个必需品,没有JSX的React也可以正常工作:只要你乐意用JavaScript代码去创建这些虚拟DOM元素。

JSX语法

基本规则:遇到HTML标签(以< 开头),就用HTML规则解析;遇到代码块(以{ 开头),就用JavaScript规则解析。
例如:

var names = ['Alice', 'Emily', 'Kate'];
ReactDOM.render( 
  <div> 
  { 
    names.map(function (name) {
     return <div>Hello, {name}!</div> 
    }) 
  } 
  </div>,
 document.getElementById('example'));

输出结果:

Hello, Alice!
Hello, Emily!
Hello, Kate!

小语法总结:

ReactDOM.render(
  <div>{1 + 1}</div>,
  document.getElementById('example')
);
var person = <Person name={window.isLoggedIn ? window.name : ' '} />;
ReactDOM.render(
  <div>{/*注释*/}</div>,
  document.getElementById('example')
);
var arr = [<h1>Alice</h1>, <h2>Emily</h2>];
ReactDOM.render(
  <div>{arr}</div>,
  document.getElementById('example')
);
上一篇 下一篇

猜你喜欢

热点阅读