React.createElement的用法

  1. <div className="shopping-list">
  2. <h1>Shopping List for {props.name}</h1>
  3. <ul>
  4. <li>Instagram</li>
  5. <li>WhatsApp</li>
  6. <li>Oculus</li>
  7. </ul>
  8. </div>;

等同于

  1. React.createElement("div", {
  2. className: "shopping-list"},
  3. React.createElement("h1", null, "Shopping List for ", props.name),
  4. React.createElement("ul", null,
  5. React.createElement("li", null, "Instagram"),
  6. React.createElement("li", null, "WhatsApp"),
  7. React.createElement("li", null, "Oculus")));
  1. React.createElement(
  2. type,
  3. [props],
  4. [...children]
  5. )

JSX

可以通俗的理解为Javascript和XML的集合

  1. const element = <h1>Hello, world!</h1>;

在 JSX 中嵌入表达式

在下面的例子中,我们声明了一个名为 name 的变量,然后在 JSX 中使用它,并将它包裹在大括号中:

  1. const name = 'Josh Perez';
  2. const element = <h1>Hello, {name}</h1>;
  3. ReactDOM.render(
  4. element,
  5. document.getElementById('root')
  6. );
  1. function formatName(user) {
  2. return user.firstName + ' ' + user.lastName;
  3. }
  4. const user = {
  5. firstName: 'Harper',
  6. lastName: 'Perez'
  7. };
  8. const element = (
  9. <h1>
  10. Hello, {formatName(user)}!
  11. </h1>
  12. );
  13. ReactDOM.render(
  14. element,
  15. document.getElementById('root')
  16. );

JSX 特定属性

你可以通过使用引号,来将属性值指定为字符串字面量:

  1. const element = <div tabIndex="0"></div>;

也可以使用大括号,来在属性值中插入一个 JavaScript 表达式:

  1. const element = <img src={user.avatarUrl}></img>;

JSX 防止注入攻击

你可以安全地在 JSX 当中插入用户输入内容:

  1. const title = response.potentiallyMaliciousInput;
  2. // 直接使用是安全的:
  3. const element = <h1>{title}</h1>;

JSX 表示对象

Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用。
以下两种示例代码完全等效:

  1. const element = (
  2. <h1 className="greeting">
  3. Hello, world!
  4. </h1>
  5. );
  1. const element = React.createElement(
  2. 'h1',
  3. {className: 'greeting'},
  4. 'Hello, world!'
  5. );