-
React是什么
官方解释:用于构建用户界面的 JavaScript 库
-
React特点
- 声明式编程
它允许我们只需要维护自己的状态,当状态改变时,React可以根据最新的状态去渲染我们的UI界面;
- 组件化开发
可以将一个复杂的界面拆分成一个一个小的组件
- 多平台适配
- Web开发
- ReactNative用于开发移动端
- ReactVR用于开发虚拟现实Web应用程序
-
React开发依赖
- react:包含react所必须的核心代码
包含了react和react-native所共同拥有的核心代码
- react-dom:react渲染在不同平台所需要的核心代码
- web端:react-dom会将jsx最终渲染成真实的DOM,显示在浏览器中
- native端:react-dom会将jsx最终渲染成原生的控件(比如Android中的Button,iOS中的UIButton)。
- babel
是目前前端使用非常广泛的编辑器、转移器
- 可以将ES6转成大多数浏览器都支持的ES5的语法
- 将jsx转换成React代码的工具
-
事件绑定中的this指向
默认情况下会指向undefined
首先第一点我们知道在正常DOM操作中,监听点击,监听函数中的this其实是节点对象(比如说是button对象),但是React并不是直接渲染成真实的DOM,我们所编写的button只是一个语法糖,它的本质React的Element对象,所以react给我们的函数绑定的this,默认情况下就是一个undefined;
修改this指向方法:
- 传入函数时,给这个函数直接绑定this如下
<button onClick={this.changeText.bind(this)}>改变文本</button>
- 箭头函数
-
简单的React Demo示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel">
let message = "Hello World";
function btnClick() {
message = "Hello React";
console.log(message);
render();
}
function render() {
ReactDOM.render(
<div>
<h2>{message}</h2>
<button onClick={btnClick}>改变文本</button>
</div>,
document.getElementById("app")
);
}
render();
</script>
</body>
</html>
-
简单的组件化Demo示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel">
class App extends React.Component {
constructor() {
super();
this.state = {
message: "Hello World"
}
}
render() {
return (
<div>
<h2>{this.state.message}</h2>
<button onClick={this.btnClick.bind(this)}>改变文本</button>
</div>
)
}
btnClick() {
this.setState({
message: "Hello React"
})
}
}
ReactDOM.render(<App/>, document.getElementById("app"));
</script>
</body>
</html>