一 es5 es6类定义 以及类的继承
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 22:05:18
* @LastEditTime: 2022-10-11 22:09:16
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//es5中如何定义类
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.running = function() {
console.log(this.name, this.age, "running")
}
let p = new Person('why', 18)
console.log(p.name, p.age)
p.running()
</script>
</body>
</html>
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 22:09:44
* @LastEditTime: 2022-10-11 22:18:18
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//es6通过class创建
class Person {
//构造方法
constructor(name, age) {
this.name = name
this.age = age
}
//定义方法
running() {
console.log(this)
console.log(this.name, this.age, "running")
}
}
const p = new Person("why", 18)
console.log(p.name, p.age)
p.running()
//this绑定题目
let func = p.running
//func() //undefined
let obj = {
name: 'kobe',
age: 30
}
func.call(obj) //使用call是对象 apply是数组
//重新给func赋值
func = func.bind(obj)
func()
</script>
</body>
</html>
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 22:19:11
* @LastEditTime: 2022-10-11 22:30:26
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!--
面向对象有三大特征 封装 继承 多态
继承:1 减少重复的代码 2 多态的前提(鸭子类型)
-->
<script>
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
running() {
console.log("running方法")
}
}
class Student extends Person {
constructor(name, age, sno) {
super(name, age)
this.sno = sno
}
}
const stu = new Student("why", 18, 110)
console.log(stu.name, stu.age, stu.sno)
stu.running()
class Teacher extends Person{
constructor(name, age, title) {
//子类必须要初始化父类对象
super(name, age)
this.title = title
}
}
const teach = new Teacher("why teacher", 22, '数学')
console.log(teach.name, teach.age, teach.title)
teach.running()
</script>
</body>
</html>
二 案例练习_列表循环
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 22:33:05
* @LastEditTime: 2022-10-11 22:53:46
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>
<!--编写react代码-->
<script type="text/babel">
class App extends React.Component {
constructor() {
super()
this.state = {
message: 'Hello World',
title: '电影列表',
movies: [
"大话西游", "盗梦空间", "星际穿越", "流浪地球"
]
}
}
render() {
const liArray = [] //方法一循环的方式
for(let movie of this.state.movies) {
liArray.push(<li>{ movie }</li>)
}
return (
<div>
<h2>{ this.state.title }</h2>
<ul>
{ liArray }
</ul>
<ul>
{
this.state.movies.map((item) => {
return <li>{ item }</li>
})
}
</ul>
</div>
)
}
}
ReactDOM.render(<App/>, document.getElementById("app"))
</script>
</body>
</html>
三 计数器案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>
<script type="text/babel">
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
counter: 0
}
}
render() {
return (
<div>
<h2>当前计数: { this.state.counter }</h2>
<button onClick={this.increment.bind(this)}>+1</button>
<button onClick={this.decrement.bind(this)}>-1</button>
</div>
)
}
increment() {
this.setState({
counter: this.state.counter + 1
})
}
decrement() {
this.setState({
counter: this.state.counter - 1
})
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
</script>
</body>
</html>
四 认识jsx
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 23:12:46
* @LastEditTime: 2022-10-11 23:13:36
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>
<script type="text/babel">
//jsx语法
const element = <h2>hello world</h2>
ReactDOM.render(element, document.getElementById('app'))
</script>
</body>
</html>
五 jsx中如何写注释
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 23:22:54
* @LastEditTime: 2022-10-11 23:52:28
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>
<script type="text/babel">
class App extends React.Component {
constructor() {
super()
}
render() {
return (
<div>
{/*我是一段注释*/}
<h2>Hello world</h2>
</div>
)
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
</script>
</body>
</html>
六 jsx嵌入数据
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 23:25:42
* @LastEditTime: 2022-10-11 23:53:18
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>
<script type="text/babel">
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
//1 {}中可以正常显示的内容
name: 'why', //String
age: 18, //Number
names: ['abc', 'cba', 'bba'], //Array
//2 {}中不能显示(忽略)
test1: null, // null
test2: undefined, //undefined
test3: true, //Boolean
flag: true,
//3. 对象不能作为jsx的子类
friend: {
name: 'kobe',
age: 12,
}
}
}
render() {
return (
<div>
<h2>{ this.state.name }</h2>
<h2>{ this.state.age }</h2>
<h2>{ this.state.names }</h2>
<h2>{ this.state.test1 }</h2>
{/*如果想显示+ '' 或者用tostring*/}
<h2>{ this.state.test1 + '' }</h2>
<h2>{ this.state.test2 }</h2>
<h2>{ this.state.test3 }</h2>
<h2>{ this.state.test3.toString() }</h2>
<h2>{ this.state.flag ? '你好啊' : null }</h2>
</div>
)
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
</script>
</body>
</html>
七 jsx嵌入表达式
<!--
* @Description:
* @Version: 2.0
* @Autor: sun
* @Date: 2022-10-11 23:38:34
* @LastEditTime: 2022-10-11 23:42:58
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>
<script type="text/babel">
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
firstName: 'Kobe',
lastName: 'bryant',
isLogin: true
}
}
render() {
const { firstName, lastName, isLogin } = this.state
return (
<div>
{/*1 运算符表达式*/}
<h2>{ firstName + lastName }</h2>
<h2>{ 50 * 20 }</h2>
{/*2 三元表达式*/}
<h2>{ isLogin ? '欢迎回来' : '请先登陆' }</h2>
{/*3 进行函数调用*/}
<h2>{ this.getFullName() }</h2>
</div>
)
}
getFullName() {
return this.state.firstName + " " + this.state.lastName
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
</script>
</body>
</html>