Skip to content

Commit d05a66b

Browse files
committed
add by dk
0 parents  commit d05a66b

File tree

5 files changed

+19584
-0
lines changed

5 files changed

+19584
-0
lines changed

README.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# 认识 React
2+
React 是 facebook 开源的一套框架,可总结为以下几个特点:
3+
- 基于 jsx 语法糖实现
4+
- JUST THE UI:在多层架构的设计模式中,React 并不算 MVC 的架构,它可理解为 MVC 的 V 层。
5+
- VIRTUAL DOM:虚拟DOM,是轻量的 js 对象,只保留了原生 dom 的一些常用的属性和方法。
6+
- DATA FLOW: React是单向响应的数据流。
7+
8+
# JSX 语法
9+
一种特殊的 js 语法糖,可以在代码中把 html 标签当对象使用,其可以总结成以下几个特点:
10+
- 不加任何引号
11+
以前在 js 中使用 html 标签都是加上引号当成字符串使用,而在 jsx 语法中不用加引号,直接当对象使用
12+
```javascript
13+
var html = <h1>React</h1>;
14+
```
15+
- 标签一定要有对应的结束标标签或结束标识:
16+
有时候我们在写 html 结构的时候,都没有把对应的结束标识加上,但浏览器能正常解析,但在 jsx 语法当中,则要强制写标准的 html 结构
17+
这一段 html 标签在浏览器是能正常解析
18+
```html
19+
<input type="text" value="React">
20+
```
21+
这一段在 jsx 语法当中则会报错
22+
```javascript
23+
var html = <input type="text" value="React">;
24+
```
25+
jsx 正确写法应该是这样的
26+
```javascript
27+
var html = <input type="text" value="React" />;
28+
var div = <div>React</div>;
29+
```
30+
- 只能有一个根节点
31+
在 jsx 语法当中,最顶层的结构一定只有一个节点,不能出现兄弟节点
32+
```javascript
33+
var html =
34+
<div>
35+
<h1>Tom</h1>
36+
<h1>Lucy</h2>
37+
</div>
38+
```
39+
- 不能在标签当中加注释
40+
在 jsx 语法当中,html 标签是一个对象,是一种数据结构,而不是真实的 dom 节点,也不是字符串,所以在标签当中不能添加注释。
41+
下面的代码是在标签当中添加了注释,所以会报错。
42+
```javascript
43+
var html =
44+
<div>
45+
<!--不能添加注释,这里会报错-->
46+
<h1>Tom</h1>
47+
<h1>Lucy</h2>
48+
</div>
49+
```
50+
- jsx 语法允许 html 标签和 javascript 代码混写
51+
在 jsx 语法当中,要在 html 标签中用到 js 代码,则用花括号({expression})括起来。
52+
```javascript
53+
var name = "DK";
54+
var style = {fontSize: '12px', color: 'red'};
55+
var html = <span style={style}>{name}</span>;
56+
```
57+
最终上面的代码将会解析成
58+
```html
59+
<span style="font-size:12px; color:red">DK</span>
60+
```
61+
62+
# React 使用
63+
- React 是一个第三方的框架库,所以在使用前要先把相关的库文件引入。
64+
```html
65+
<!--React 核心库-->
66+
<script src="../../../../libs/react/react.js"></script>
67+
<!--React 跟 Dom 相关的功能库-->
68+
<script src="../../../../libs/react/react-dom.js"></script>
69+
<!--babel 库,将 JSX 语法转为 JavaScript 语法-->
70+
<script src="../../../../libs/react/browser.min.js"></script>
71+
```
72+
- React 是基于 jsx 语法去实现,所以需要明确 script 的类型为 text/babel
73+
```html
74+
<script type="text/bebal"></script>
75+
```
76+
- 使用 React 的核心对象和方法`ReactDOM.render`进行将 html 标签渲染到指定的容器
77+
```html
78+
<body>
79+
<div id="div1"></div>
80+
<div id="div2"></div>
81+
<div id="div3"></div>
82+
83+
<!--jsx 语法-->
84+
<script type="text/babel">
85+
//将标签直接渲染到容器 div1 当中
86+
ReactDOM.render(<h1>DK</h1>, document.getElementById('div1'));
87+
88+
var _style = {fontSize: '12px', color: 'red'};
89+
var _name = "Tom";
90+
var _obj = {name: "DK", age: 18};
91+
//标签与 js 代码混写
92+
ReactDOM.render(<h1 style={_style}>{_obj.age + (1 + 2)}</h1>, document.getElementById('div2'));
93+
94+
var array = ["Tom", "Lucy", "Lily"];
95+
//多级标签和 js 代码混写
96+
ReactDOM.render(
97+
<div>
98+
<ul>
99+
{
100+
array.map(function(arg1, arg2){
101+
return <li key={arg2}>{arg1}</li>;
102+
})
103+
}
104+
</ul>
105+
<ul><li>Sam</li></ul>
106+
<ul><li><input type="text" /></li></ul>
107+
</div>,
108+
document.getElementById('div3')
109+
);
110+
</script>
111+
</body>
112+
```

js/browser.min.js

Lines changed: 42 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/react-dom.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* ReactDOM v15.0.1
3+
*
4+
* Copyright 2013-present, Facebook, Inc.
5+
* All rights reserved.
6+
*
7+
* This source code is licensed under the BSD-style license found in the
8+
* LICENSE file in the root directory of this source tree. An additional grant
9+
* of patent rights can be found in the PATENTS file in the same directory.
10+
*
11+
*/
12+
// Based off https://github.com/ForbesLindesay/umd/blob/master/template.js
13+
;(function(f) {
14+
// CommonJS
15+
if (typeof exports === "object" && typeof module !== "undefined") {
16+
module.exports = f(require('react'));
17+
18+
// RequireJS
19+
} else if (typeof define === "function" && define.amd) {
20+
define(['react'], f);
21+
22+
// <script>
23+
} else {
24+
var g;
25+
if (typeof window !== "undefined") {
26+
g = window;
27+
} else if (typeof global !== "undefined") {
28+
g = global;
29+
} else if (typeof self !== "undefined") {
30+
g = self;
31+
} else {
32+
// works providing we're not in "use strict";
33+
// needed for Java 8 Nashorn
34+
// see https://github.com/facebook/react/issues/3037
35+
g = this;
36+
}
37+
g.ReactDOM = f(g.React);
38+
}
39+
40+
})(function(React) {
41+
return React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
42+
});

0 commit comments

Comments
 (0)