菜单
一、React开发者工具安装和使用
1.1 React开发者工具的安装
打开谷歌浏览器-->扩展程序--->google应用商店,安装React开发者工具,要注意是Facebook公司的
1.2 React开发者工具的使用
Components:组件列表
Profiler:记录加载的性能
二、组件
2.1 组件的定义
React的组件有两种:
- 函数式组件
- 类式组件
2.2 函数式组件
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<!--引入React 核心库-->
<script type="text/javascript" src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<!--引入React-dom 用于支持React操作DOM-->
<script type="text/javascript" src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!--引入babel 用于Jsx转换称js-->
<script type="text/javascript" src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/babel">
//1、创建一个函数式组件
function MyComponent(){
console.log(this); //此处的this是undefined,因为Babel编译后开启了严格模式
return <h2>我是函数式组件,用于简单的组件</h2>
}
//2、创建一个组件虚拟的DOM
const VDOM = <MyComponent/>
//3、渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
/*
1、React 解析组件<MyCommponment/>
2、发现组件是函数式定义,随后调用该函数,返回虚拟的DOM
3、虚拟的DOM转为真实的DOM,随后呈现在页面中
*/
</script>
</body>
</html>
注意函数式组建只能适用于简单组件使用。
2.3 类式组件
2.3.1 Js类的例子
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<script type="text/javascript">
//创建一个Person类
class Person{
//构造器方法,用于初始化
constructor(name,age){
//构造器的中的this 是类的实例对象
this.name=name;
this.age=age;
}
//一般方法
speak(sex){
//通过Person实例调用speak,这里的this就是Person实例
console.log(`我叫${this.name},性别${sex},我的年龄是${this.age}`)
}
}
//创建一个Person的实例对象
const p1 = new Person('tom',12)
const p2 = new Person('mike',19)
p1.speak('男')
p2.speak('女')
</script>
</body>
</html>
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<script type="text/javascript">
//创建一个Person类
class Person{
//构造器方法,用于初始化
constructor(name,age){
//构造器的中的this 是类的实例对象
this.name=name;
this.age=age;
}
//一般方法
speak(sex){
//通过Person实例调用speak,这里的this就是Person实例
console.log(`我叫${this.name},性别${sex},我的年龄是${this.age}`)
}
study(){
console.log("好好学习,天天向上")
}
}
//创建一个学生类集成Person
class Student extends Person{
constructor(name,age,grade){
super(name,age);
this.grade=grade
}
//重写从父类继承过来的方法
speak(){
console.log(`我叫${this.name},${this.grade}年纪,我的年龄是${this.age}`)
}
}
const s1 = new Student('tom',19,'高一')
s1.speak()
s1.study()
</script>
</body>
</html>
类式组件例子
1、类的构造时不是必须写,当需要进行初始化的时候才写
2、如果A继承了B类,在A类需要写上构造器的话,必须用super调用
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<!--引入React 核心库-->
<script type="text/javascript" src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<!--引入React-dom 用于支持React操作DOM-->
<script type="text/javascript" src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!--引入babel 用于Jsx转换称js-->
<script type="text/javascript" src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/babel">
//1、创建一个类式组件
class MyComponent2 extends React.Component{
render(){
//render中的this,是Mycomponment2的实例对象
console.log("render中的this:",this)
return <h2>我是类式组件,适用于复杂组件定义</h2>
}
}
//2、创建一个组件虚拟的DOM
const VDOM = <MyComponent2/>
//3、渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
/*
1、React 解析组件<MyCommponment/>
2、发现组件是类式定义,随后进行实例化,调用里面上的render,返回虚拟的DOM
3、虚拟的DOM转为真实的DOM,随后呈现在页面中
*/
</script>
</body>
</html>
通过对比,类似组件可以调用this,有状态,可做成复杂组件
三、状态State
不推荐例子,但兼容性强:不可能每增加一个函数对增加this.xxx=this.xxx.bind(this);
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<!--引入React 核心库-->
<script type="text/javascript" src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<!--引入React-dom 用于支持React操作DOM-->
<script type="text/javascript" src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!--引入babel 用于Jsx转换称js-->
<script type="text/javascript" src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/babel">
//1、创建一个类式组件
class Weacher extends React.Component{
constructor(props){
super(props)
this.state ={isHot:false,wind:"微风"}
//解决changeWeather中的this指向问题,解决函数中console.log(this) 输出undefined
this.changeWeather = this.changeWeather.bind(this)
}
render(){
//读取状态
const{isHot,wind}=this.state
return <h2 onClick={this.changeWeather}>今天的天气很{isHot?'炎热':'凉爽'},{wind}</h2>
}
changeWeather(){
console.log(this.state)
const isHot = this.state.isHot
this.setState({
isHot:!isHot
})
}
}
//2、创建一个组件虚拟的DOM
const VDOM = <Weacher/>
//3、渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
/*
1、React 解析组件<MyCommponment/>
2、发现组件是类式定义,随后进行实例化,调用里面上的render,返回虚拟的DOM
3、虚拟的DOM转为真实的DOM,随后呈现在页面中
*/
</script>
</body>
</html>
优化例子(存在浏览器兼容问题)
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<!--引入React 核心库-->
<script type="text/javascript" src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<!--引入React-dom 用于支持React操作DOM-->
<script type="text/javascript" src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!--引入babel 用于Jsx转换称js-->
<script type="text/javascript" src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/babel">
//1、创建一个类式组件
class Weacher extends React.Component{
state = {isHot:false,wind:'微风'}
render(){
//读取状态
const{isHot,wind}=this.state
return <h2 onClick={this.changeWeather}>今天的天气很{isHot?'炎热':'凉爽'},{wind}</h2>
}
changeWeather = ()=>{
console.log(this.state)
const isHot = this.state.isHot
this.setState({
isHot:!isHot
})
}
}
//2、创建一个组件虚拟的DOM
const VDOM = <Weacher/>
//3、渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
/*
1、React 解析组件<MyCommponment/>
2、发现组件是类式定义,随后进行实例化,调用里面上的render,返回虚拟的DOM
3、虚拟的DOM转为真实的DOM,随后呈现在页面中
*/
</script>
</body>
</html>
如果需要在changeWeather中传参
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<!--引入React 核心库-->
<script type="text/javascript" src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<!--引入React-dom 用于支持React操作DOM-->
<script type="text/javascript" src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!--引入babel 用于Jsx转换称js-->
<script type="text/javascript" src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/babel">
//1、创建一个类式组件
class Weacher extends React.Component{
state = {isHot:false,wind:'微风'}
render(){
//读取状态
const{isHot,wind}=this.state
return <h2 onClick={(event) => this.changeWeather(event, "加大风力")}>今天的天气很{isHot?'炎热':'凉爽'},{wind}</h2>
}
changeWeather = (event,wind)=>{
console.log(this.state)
const isHot = this.state.isHot
this.setState({
isHot:!isHot,
wind
})
}
}
//2、创建一个组件虚拟的DOM
const VDOM = <Weacher/>
//3、渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
/*
1、React 解析组件<MyCommponment/>
2、发现组件是类式定义,随后进行实例化,调用里面上的render,返回虚拟的DOM
3、虚拟的DOM转为真实的DOM,随后呈现在页面中
*/
</script>
</body>
</html>