React:JSX

React的一个特色/核心机制是通过创建虚拟DOM,减少对实际DOM的操作,从而提高页面性能。

JSX其实是把XML语法加入到JS中,我们可以用JSX来构建界面,然后JSX由转换器转换成纯JS,在浏览器中执行。在React的文档中,很直接地告诉我们JSX只是JS的一个语法拓展而已。

1.基础语法:

1 ReactDOM.render(
2   <h1>Hello, world!</h1>,
3   document.getElementById(‘root‘)
4 );
ReactDOM.render是核心的渲染方法:,其传入俩参数,第一个是构建的模板,第二个是挂载的DOM节点。

2.JSX Object

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

上面定义的element既不是string也不是html,而是JSX语法创建的一个UI模板,也是一个React实例--React element。在React中我们会用它来渲染DOM结构。

当我们用typeof操作符将它console.log时,输出是一个“object”。

3.插入表达式:

 1 const element = (
 2   <h1>
 3     Hello, {formatName(user)}!
 4   </h1>
 5 );
 6
 7 ReactDOM.render(
 8   element,
 9   document.getElementById(‘root‘)
10 );

JSX和其他模板语法一样,可以在其中插入JS表达式,用一个大括号括起。其中formatName函数返回的是计算后的某个字符串。

4.JSX本身也可以作为函数返回的表达式

由于JSX在编译后变成JS对象,因此在源代码中我们可直接将JSX作为函数的输出插入到UI模板中。

5.JSX插入标签特性

如果要在HTML标签中插入表达式,使用{},用引号的话只会把值作为字符串处理。

5.多行模板

如果JSX构建的模板想隔行,要用小括号括起:

1 const element = (
2   <div>
3     <h1>Hello!</h1>
4     <h2>Good to see you here.</h2>
5   </div>
6 );

如果标签中没有子元素,记得要加闭合标签。

6.特性名称要用驼峰写法:

文档强调,ReactDOM中特性名称要用驼峰写法,如className取代class,tagIndex取代tagindex,因为JSX毕竟是JS而不是纯html。

7.JSX可以防止恶意注入

JSX在渲染之前都会对插入的值进行escape(字符串编码),所有插入值都转换为字符串。

8.React.createElement()方法:

在创建React模板时,除了像上面那样写html,还可以调用等价的React.createElement()。

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

其产生的是如下的React element对象:

1 // Note: this structure is simplified
2 const element = {
3   type: ‘h1‘,
4   props: {
5     className: ‘greeting‘,
6     children: ‘Hello, world‘
7   }
8 };

React使用这些对象来构建浏览器的DOM。

时间: 2024-12-18 21:51:15

React:JSX的相关文章

【go】脑补框架 Express beego tornado Flux reFlux React jsx jpg-ios出品

http://goexpresstravel.com/ 今天 Express 的作者 TJ Holowaychuk 发了一篇文章,正式宣告和 Node.js 拜拜了,转向 Go 语言. Go verses Node 如果你在做分布式工作,你会发现 Go 语言丰富的并发原语非常有帮助.虽然我们用 Node 的 generator 也可以做类似的事,但在我看来,generator 永远只能做一半.没有独立的栈错误处理和报告,充其量是中等.我也不想再等(Node)社区花3 年去整理(改善),尤其是我们

在react jsx中,为什么使用箭头函数和bind容易出现问题

在之前的文章中,已经说明如何避免在react jsx中使用箭头函数和bind(https://medium.freecodecamp.o... 但是没有提供一个清晰的demo展示为什么要这样做. 现在来一些例子吧. 在这个例子中,我们通过使用一个箭头函数(=>)来bind用户ID到每个删除按钮中. ## index.js import React from 'react'; import { render } from 'react-dom'; import User from './User'

React JSX语法说明

什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代码里直接写起了XML标签,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,当然你想直接使用纯Javascript代码写也是可以的,只是利用JSX,组件的结构和组件之间的关系看上去更加清晰. var MyComponent = React.createClass({/*...*/}); var myElement = <MyComponent som

React:JSX 深入

React入门的的时候,我们(我自己啦)喜欢都跟着例子来,用标签的语法写JSX,比如:<Mycomponent  key={this.props.id}  onClick={this.props.doSth} ></Mycomponent  > 觉得真是在js里写html. 现在文档告诉我们,JSX这种写法呀,其实是React.createElement(component, props, ...children)的语法糖,就好像类是创建对象的语法糖一样. 三个参数分别是其类型.属

[React] Linting React JSX with ESLint (in ES6)

ESLint is a JavaScript linter (static analysis tool) that offers full support for ES6, JSX, and other modern tools via plugins. We walk through setting up ESLint in a project, using the eslint --init CLI tool with the JSX and ES6 options, writing a R

react jsx语法

JSX javascript+html 一种把js和html混合书写的语法,这种语法浏览器不支持,最终会通过babeljs转译成creatElememnt语法,React.createElement("h1", null, "hello"); let ele1 = <h1>hello</h1> import React from 'react'; import ReactDOM from 'react-dom'; //JSX javascri

sublime react jsx 格式化 插件 配置

插件名是: SUBLIME JSFMT . github地址是: https://github.com/royriojas/esformatter-jsx/wiki/Usage-with-jsfmt 设置Setting user: // add to your { "autoformat": true, "extensions": [ "js", "jsx", "sublime-settings" ], &

vs code编辑器格式化react jsx插件

vs code格式化jsx比较适合的插件是react-beautify: 格式化中遇到的问题是indent几格,这个问题的解决是你在space里设置几格这个插件就会自动格式化出几格.

React——JSX

一.将表达式嵌套在JSX中 要在JSX中内嵌js表达式只需要将js表达式放在{}中,例如: const element = <h1>this is a JSX {sayName()}</h1> function sayName(){}; 二.JSX也是表达式 在编译之后Jsx会成为一个常规的js对象.所以可以在if,for语句中使用Jsx,例如 function getName(firstname,lastname,all=false){ if(all){ return <p