babel.min.js
react.development.js
react-dom.development.js
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
// 1.创建虚拟DOM
// 这里不要用引号,因为他不是字符串
const VDOM = <h1>Hello,React</h1>
// 2.渲染虚拟DOM到页面
// 虚拟DOM,容器
ReactDOM.render(VDOM,document.getElementById('test'))
script>
html>
为了解决js中写虚拟DOM麻烦的问题
虚拟DOM本质是js中的一个Object类型的对象
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
<div id="real">div>
body>
<script type="text/babel">
// 1.创建虚拟DOM
// 这里不要用引号,因为他不是字符串
const VDOM = (<h1>Hello,React</h1>)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
const TDOM = document.getElementById('real')
console.log('真实DOM',TDOM)
console.log('虚拟DOM',VDOM)
debugger
/*
关于虚拟DOM:
1.本质是Object类型的对象
2.虚拟DOM比较轻,真实DOM比较重,因为虚拟DOM是React内部在用,无需真实DOM上那么多属性
3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上
*/
script>
html>
jsx语法规则:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
<style>
.title{
background-color: antiquewhite;
}
style>
head>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
const myId = 'atu'
const myData = 'hello,atus'
// 1.创建虚拟DOM
const VDOM = (
<div>
<h2 className="title" id="{myId}">
<span style={{color:'red',fontSize:'30px'}}>{myData}</span>
</h2>
<input/>
</div>
)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
/*
jsx语法规则:
1.定义虚拟DOM时,不要写引号
2.标签中混入JS表达式时要用{}
3.样式的类名指定不要用class,要用className
4.内联样式要用style={{key:value,key:value}}的形式去写,如果变量时多个单词使用驼峰命名法例如fontSize
5.虚拟DOM中只能有一个根标签
*/
script>
html>
列表数据的渲染
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
<style>
.title{
background-color: antiquewhite;
}
style>
head>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
// 模拟列表数据
const data = ['vue','react','angular']
// 1.创建虚拟DOM
const VDOM = (
<div>
<h1>
前端框架
</h1>
<ul>
{
data.map((item,index)=>{
return <li key={index}>{item}</li>
})
}
</ul>
</div>
)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
script>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.5.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.5.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
// 1.创建函数式组件 函数名首字母必须大写
function Demo(){
// 此处的this是undefined,因为Babel编译后开启了严格模式
console.log(this)
return <h2>我是用函数定义的组件,我适用于简单组件的定义</h2>
}
// 2.渲染组件到页面
ReactDOM.render(<Demo/>,document.getElementById('test'))
script>
html>
注意点:函数名一定要大写,小写的话他就去找html中的标签去了,而且标签一定要闭合
类式组件
执行了ReactDOM.render之后,
1.react解析组件标签,找到了Demo组件
2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法
3.将render返回的虚拟DOM转换为真实DOM,渲染真实DOM
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.5.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.5.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
// 1.创建类式组件
class Demo extends React.Component{
// render方法是放在Demo类的原型对象上,供实例使用
render(){
// render中的this是--Demo类的实例对象 也叫Demo组件实例对象
console.log('render中的this',this)
return <h2>我是用类定义的组件,我适用于复杂组件的定义</h2>
}
}
// 2.渲染组件到页面
ReactDOM.render(<Demo/>,document.getElementById('test'))
script>
html>
有状态的是复杂组件,没有状态的是简单组件
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.5.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.5.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
// 1.创建类式组件
class Demo extends React.Component{
constructor(props){
super(props)
// 初始化状态
this.state = {isHot:true,wind:'风'}
// 解决changeWeather的this指向问题
// this.changeWeather = this.changeWeather.bind(this)
}
render(){
console.log(this.state)
return <h2 onClick={this.changeWeather.bind(this)}>今天的天气很{this.state.isHot ? '炎热' : '不热'},没有{this.state.wind}</h2>
}
changeWeather(){
// changeWeather在Demo类的原型对象上,供实例使用
// 由于changeWeather是作为onclick的回调,所以this.changeWeather不是通过实例调用的,是直接调用
// 类中的方法默认开启了局部的严格模式,所以changeWeather中的this为undefined
// 需要使用.bind(this)
console.log('点击成功',this)
// 状态不可直接更改,需要借助一个内置的api去更改
// this.state.isHot = !this.state.isHot
this.setState({isHot:!this.state.isHot})
}
}
// 2.渲染组件到页面
ReactDOM.render(<Demo/>,document.getElementById('test'))
script>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.5.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.5.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
body>
<script type="text/babel">
// 1.创建类式组件
class Demo extends React.Component{
// 初始化状态
state = {isHot:true,wind:'风'}
render(){
return <h2 onClick={this.changeWeather}>今天的天气很{this.state.isHot ? '炎热' : '不热'},没有{this.state.wind}</h2>
}
// 自定义方法--要用赋值语句的形式+箭头函数
changeWeather = ()=>{
this.setState({isHot:!this.state.isHot})
}
}
// 2.渲染组件到页面
ReactDOM.render(<Demo/>,document.getElementById('test'))
script>
html>
箭头函数的this指向他的外面一层
state是组件对象最重要的属性,组件被称为“状态机”,通过更新组件的state来更新对应页面显示,重新渲染组件
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.5.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.5.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
<div id="test2">div>
<div id="test3">div>
body>
<script type="text/babel">
// 1.创建类式组件
class Person extends React.Component{
render(){
console.log(this)
const {name,sex,age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
}
// 2.渲染组件到页面
ReactDOM.render(<Person name="atu" age="20" sex = "n"/>,document.getElementById('test'))
ReactDOM.render(<Person name="w" age="20" sex = "n"/>,document.getElementById('test2'))
ReactDOM.render(<Person name="p" age="20" sex = "n"/>,document.getElementById('test3'))
script>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>titletitle>
head>
<script src="https://cdn.staticfile.org/react/16.5.0/umd/react.development.js">script>
<script src="https://cdn.staticfile.org/react-dom/16.5.0/umd/react-dom.development.js">script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js">script>
<body>
<div id="test">div>
<div id="test2">div>
<div id="test3">div>
body>
<script type="text/babel">
// 1.创建类式组件
class Person extends React.Component{
render(){
console.log(this)
const {name,sex,age} = this.props
return (
<ul>
<li>姓名:{name}</li>
<li>性别:{sex}</li>
<li>年龄:{age}</li>
</ul>
)
}
}
// 2.渲染组件到页面
ReactDOM.render(<Person name="atu" age="20" sex = "n"/>,document.getElementById('test'))
ReactDOM.render(<Person name="w" age="20" sex = "n"/>,document.getElementById('test2'))
const data = {name:'wawan',sex:'s',age:'23'}
// ReactDOM.render(,document.getElementById('test3'))
ReactDOM.render(<Person {...data}/>,document.getElementById('test3'))
script>
html>
必要性限制
数据类型限制
默认值限制