1 Hello React
就如最初我们学习某个js一样,创建html,引入reactjs相关库,写Hello React。
- reactjs相关库
- react.development.js:react核心库
- react-dom.development.js:react操作DOM扩展库
- babel.min.js:jsx转js库,浏览器不识别jsx,需要babel转换成js。
步骤:
- 创建html
- 准备好容器
- 引入react相关库
- react.development.js,react-dom.development.js,babel.min.js顺序引入。
- script内编写jsx
- script type=“text/babel”
示例代码1-1如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello React</title>
</head>
<body>
<div id="test"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
// 1.创建虚拟DOM
const VDOM = <h1>hello react</h1>
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM, document.getElementById('test'))
</script>
</body>
</html>
2 虚拟DOM创建方式
我们要在页面展示的结构如下:
<h1>
<span>hello,reac</span>
</h1>
2.1 js方式创建
代码2.1-1如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js创建虚拟DOM</title>
</head>
<body>
<div id="test"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript">
// 1.创建虚拟DOM
const VDOM = React.createElement('h1',{id: 'title'}, React.createElement('span',{}, 'hello, react'))
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM, document.getElementById('test'))
</script>
</body>
</html>
-
不需要babel.min.js
-
API格式
React.createElement('标签名',标签属性,'内容')
- 标签名:比如h1,div,table
- 标签属性:对象,比如{key: value}
- 内容:如果标签有嵌套,那么内容就需要嵌套创建
2.2 jsx方式创建
代码示例2.2-1如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsx创建虚拟DOM</title>
</head>
<body>
<div id="test"></div>
<div id="demo"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
// 1.创建虚拟DOM
const VDOM = (
<h1>
<span>hello,react</span>
</h1>
)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM, document.getElementById('test'))
</script>
</body>
</html>
分析:jsx极大简化了创建虚拟DOM
2.3 虚拟DOM与真实DOM区别
示例代码2.3:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hell react</title>
</head>
<body>
<div id="test"></div>
<div id="demo">111</div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
// 1.创建虚拟DOM
const VDOM = (
<h1>
<span>hello react</span>
</h1>
)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM, document.getElementById('test'))
// 虚拟DOM和真实DOM比较
console.log("虚拟DOM", VDOM)
const rDOM = document.getElementById('demo')
console.log("真实DOM", rDOM)
debugger
</script>
</body>
</html>
debugger 测试虚拟DOM,如下图2.3-1所示:
debugger测试真实DOM,如下图2.3-2所示:
关于虚拟DOM:
- 本质是Object类的对象(一般对象)
- 虚拟DOM比较“轻”,真实DOM比较重;虚拟DOM是React内部在用,无需真实DOM上那么多属性。
- 虚拟DOM最终会被React转换为真实DOM,呈现在页面上。
3 JSX语法规则
- 全称:JavaScript XML
- react定义的一种类似于XML的JS扩展语法
- 本质是React.createElement(component,props,…children)方法的语法糖。
- 作用:简化创建虚拟DOM
- 格式:var ele = <标签名>内容</标签名>
- 他不是字符串,也不是HTML/XML标签
- 它最终产生一个JS对象
示例代码3-1如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSX语法规则</title>
<style>
.title {
background-color: orange;
width: 200px;
}
</style>
</head>
<body>
<div id="test"></div>
<div id="demo"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
const myId = "helLO"
const myText = "hello react"
// 1.创建虚拟DOM
const VDOM = (
<div>
<h2 className="title" id={myId.toLowerCase()}>
<span style={{color: 'white', fontSize: '35px'}}>{myText}</span>
</h2>
<h2 className="title" id={myId.toLowerCase() + '1'}>
<span style={{color: 'white', fontSize: '35px'}}>{myText}</span>
</h2>
<input type="text" />
<good>23231</good>
</div>
)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM, document.getElementById('test'))
/*
jsx语法规则:
1.定义虚拟DOM时,不要写引号
2.标志中写入js表达式,需要用{}包裹
3.样式类名指定时不要用class,要用className
4.内联样式,要用style={{key: value,...,key: value}}的形式去写
5.虚拟DOM有且仅有一个根标签
6.标签必须闭合
7.标签首字母
(1)若小写字母开头,则将该标签转为html同名标签;若html中无同名标签报错
(2)若大写字母开头,react就渲染对应的组件;若组件未定义,则报错
*/
</script>
</body>
</html>
区分JS表达式和JS语句,示例代码3-2如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hell react</title>
<style>
.title {
background-color: orange;
width: 200px;
}
</style>
</head>
<body>
<div id="test"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
/*
区分:【js语句】和【js表达式】
1.表达式:表达式是由运算符构成,并运算产生结果的语法结构。每个表达式都会产生一个值,它可以放在任何需要一个值的地方
示例:
(1) a+b
(2) demo(1)
(3) arr.map()
(4) function fun() {}
2.语句:语句则是由分号分隔的句子或命令,是一个行为
示例:
(1) 声明语句 const a
(2) 赋值语句 const b = 2
(1) 表达式语句:a+b;
(2) 控制语句 if(a>b) {}
*/
const data = ['Vue', 'React', 'Angular']
// 1.创建虚拟DOM
const VDOM = (
<div>
<h1>前端js框架列表</h1>
<ul>
{
data.map((item, index)=>{
return <li key={index}>{item}</li>
})
}
</ul>
</div>
)
// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM, document.getElementById('test'))
</script>
</body>
</html>
后记
❓QQ:806797785
⭐️源代码仓库地址:https://gitee.com/gaogzhen/react-study
参考:
[1]尚硅谷React教程(2022加更,B站超火react教程)[CP/OL].2020-12-15.p2-p6.