承接自:第一个HelloWorld

image.png
image.png
JSX 实际上是 DOM 的一个变种

JSX介绍与使用

image.png
image.png
image.png
image.png
image.png

实例

  1. 项目结构创建如下

image.png

  1. 之后开始编辑 index.js 文件
  • 这里需要注意的是想要编译的话项目中必须得有两个文件,原因是在之前配置时有详解
  • .babelrc ``` { “presets”: [
    1. "es2015",
    2. "react",
    3. "stage-3"
    ], “plugins”: [] }
  1. - package.json

{ “devDependencies”: { “babel-preset-es2015”: “^6.24.1”, “babel-preset-react”: “^6.24.1”, “babel-preset-stage-3”: “^6.24.1” } }

  1. - 在项目新增这两个文件之后再在命令行中进入项目目录下安装所需的依赖包

cd Desktop/jsxtest //安装 package.json 文件中所配置的依赖 npm install

  1. - 之后才可以正常的编译 `ctrl + shift + p` 输入 `Babel Transform`(这里实际上也可以使用命令行 `babel` 命令进行编译的)
  2. 3.
  3. 再在项目中新建一个 babel.js 文件 将编译过的代码复制到里面并保持,再在 index.html 中引入 babel.js 文件即可
  4. 3.
  5. 在浏览器中打开页面可以看到已经成功了
  6. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-b064b3558b91a671.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  7. 5. 源码
  8. - index.html

<!DOCTYPE html>

  1. .babelrc

{ “presets”: [ “es2015”, “react”, “stage-3” ], “plugins”: [] }

  1. - index.js

var HelloMessage = React.createClass({ render: function() { return

{this.props.name}

; } });

ReactDOM.render( , document.getElementById(‘example’) );

  1. - package.json

{ “devDependencies”: { “babel-preset-es2015”: “^6.24.1”, “babel-preset-react”: “^6.24.1”, “babel-preset-stage-3”: “^6.24.1” } }

  1. - babel.js 这个是 index.js 代码编译之后生成的

“use strict”;

var HelloMessage = React.createClass({ displayName: “HelloMessage”,

  1. render: function render() {
  2. return React.createElement(
  3. "h1",
  4. null,
  5. this.props.name
  6. );
  7. }

});

ReactDOM.render(React.createElement(HelloMessage, { name: “Xiaochuan” }), document.getElementById(‘example’));

```

  • 项目结构

image.png

进一步的介绍

image.png
两种写法 ES5 和 ES6
image.png

DOM Diff

DOM Diff 是做 React 开发的一个非常牛
的算法,因为 React 是为 View 而生的,所以DOM Diff 这个算法是为了性能、为了更高效的渲染 DOM 的
image.png
image.png
需要注意的一点是以前都是现在 DOM 都是直接写在 HTML 页面上的,现在是用 JS 虚拟的生成的,这里最重要的就是重绘和重排 React 做到了将重绘和重排做到了最小化的渲染的机制

JSX 注意事项

image.png

  • 区分大小写,采用驼峰命名法

image.png

  • 添加类名使用 className ,之前在 HTML 中使用的是 class

image.png
之后编译,再将编译后的代码在 babel.js 文件中进行代码替换并保存
image.png
在 index.html 代码中新增一段样式,再在浏览器中刷新页面
image.png

  • for 属性:之前在 HTML 中使用的是 for 在 JSX 中使用 htmlFor

image.png
之后还是之前的编译复制代码的那一套操作,需要注意的是在创建多个标签的时候必须要用一个 div 标签进行包裹不然编译就会失败
刷新浏览器
image.png

  • CSS IN JS

React 他想实现的是在 JS 中写 CSS,他将 CSS 和 JS 都混到一起了
image.png
这里需要注意书写的格式 Style 是一个对象,里面的键值对除数字外使用字符串的形式,还是就是间隔符号为逗号,之后将这个 Style 对象在 render 时进行引用即可,之后还是编译的那一套东西
最后刷新浏览器
image.png
这个时候会看到控制台是有报错的
image.png
因为他不建议我们直接写 ‘font-size’ 因为他有可能是个关键字之类或者是其他的东西,写这个的话可以到官方去看详细的属性写法示例
image.png
官网推荐的都是驼峰的写法,所以下面做了修改
image.png
之后刷新浏览器可以看到已经没问题了
image.png

  • 还可以使用 React-Style 来编写样式

github 网址:https://github.com/js-next/react-style
image.png

  • 添加事件绑定

image.png
需要注意的是方法后面的 逗号 绝对不能少,之后还是那一套编译流程
之后刷新浏览器点击绑定的 h1 标签 Xiaochuan,下面就是效果图:一个弹窗 还有在控制台中输出了事件对象
image.png
下面是 ES6 的实现方法
image.png
需要注意的是 ES6 必须得使用这个严格模式的声明
image.png

  • 通过匿名函数的方式输出标签内容

image.png
上面这样写也是可以成功输出内容的,之前的方法是在下面创建 DOM 并引用其属性值实现的
image.png

  • JSX 中注释的写法

image.png
单行注释
image.png
多行注释