Introducing JSX(翻译)

开始学习React从过一遍官网资料开始。javascript

introducting JSX原文 翻译并不许确,仍是看原文好。html

JSX介绍

看下面的代码java

const element = <h1>Hello,world</h1>

这个有趣的链接语法既不是字符串也不是HTML。
它称之为JSX,它是JavaScript的一种语法扩展。咱们推荐在React中使用它去编写UI界面的样子。JSX可能会使你想起模板语言,可是它带来的是全套的JavaScript功能。react

JSX生产React「元素」。在下一节咱们将探索渲染React元素到DOM的过程。从下面的例子你可以学到JSX的基础知识。git

表达式嵌套在JSX中

你能够将JavaScript表达式经过花括号嵌套在JSX中使用。
例如,2+2 user.firstName,以及formatName(user)等都是合法表达式。github

function formatName(user) {
  return user.firstName + ' ' + user.lastName;
}

const user = {
  firstName: 'Harper',
  lastName: 'Perez'
};

const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

ReactDOM.render(
  element,
  document.getElementById('root')
);

当咱们书写多行JSX代码时候,为了良好的可读性,虽不是必须,但仍是推荐使用括号包裹避免产生JavaScript分号自动插入的问题。安全

JSX也是一种表达式

经过编译以后,JSX表达式会编译成为一个普通的JavaScript对象。
这就意味着,你能够在if声明以及for循环中使用JSX,能够将它赋值给变量,将它做为函数参数或者返回值使用。函数

function getGreeting(user) {
  if (user) {
    return <h1>Hello, {formatName(user)}!</h1>;
  }
  return <h1>Hello, Stranger.</h1>;
}

在JSX中定义属性

你可使用引号标注字符串做为属性值;学习

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

你也能够用在花括号中写JavaScript表达式做为属性值;this

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

注意不要给表达式加引号,否则JSX会将该表达式做为字符串处理。因此,你应该要么字符串加引号使用,要么花括号中写表达式,不要二者同时用。

在JSX中定义Children(?)

若是标签不闭合,能够经过/>关闭标签,就像XML

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

JSX标签包含子元素

const element = (
  <div>
    <h1>Hello!</h1>
    <h2>Good to see you here.</h2>
  </div>
);
警告:JSX语法相比HTML更接近JavaScript,React DOM使用`camelCase`(驼峰命名)属性命名规定代替HTML属性名。
例如:`class`在JSX中是`className`,`tabindex`是`tabIndex`。

JSX能够防止注入攻击(XSS)

经过JSX传入数据会更安全

const title = response.potentiallyMaliciousInput;
// This is safe:
const element = <h1>{title}</h1>;

默认状况,React DOM在渲染JSX以前会排除嵌入的输入值,所以确保在你的应用中不会注入任何不明确的书面值。任何值在渲染以前都会转换为字符串。这就避免了XSS攻击。

JSX表现为对象

Babel经过调用React.createElement()来编译JSX
下面两段代码是相同的

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

React.createElement()展示了一些检查项来帮助你减小代码bug,可是本质上老说它建立了这样的对象

// Note: this structure is simplified
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world'
  }
};

这些对象称之为「React元素」.你能够把他们当作你想在界面上看到一种描述。React读取这些对象,而后使用它们去构造DOM元素,而且保持更新。

相关文章
相关标签/搜索