React入门实践系列:从零开始构建高效、灵活的用户界面的JavaScript应用

本文介绍了 React 库,它是用于构建用户界面的 JavaScript 库,具有声明式设计、组件化等特点,因虚拟 DOM 和组件化开发而高效。还讲述了其基本使用,包括相关 js 库、创建虚拟 DOM 的方式,以及 JSX 的简介、语法规则和渲染方法。

一、React 简介

官网

  1. 英文官网:https://reactjs.org/
  2. 中文官网:https://react.docschina.org/

介绍描述

  1. React 是一个由 Facebook 开发的用于构建用户界面的 JavaScript 库

  2. 用于动态构建用户界面(只关注于视图)

  3. 采用了组件化开发的思想,通过构建可重用、封装良好的组件来构建复杂的用户界面

  4. 简洁、灵活和高效

React 的特点

  1. 声明式设计,当数据变动时 React 能高效更新并渲染合适的组件
  2. 组件化,构建管理自身状态的封装组件,然后对其组合以构成复杂的 UI
  3. 高效,React 通过对 DOM 的模拟,最大限度地减少与 DOM 的交互
  4. 灵活,在无需重写现有代码的前提下,通过引入React来开发新功能
  5. 生态丰富,React 的社区非常活跃,有大量的第三方组件和库可以供开发者使用,提供了丰富的功能和扩展性

React 高效的原因

React 之所以被认为是高效的主要得益于其虚拟 DOM 和组件化开发的特点。虚拟 DOM 使得 React 能够快速计算出需要更新的部分,并只更新这部分内容,从而减少了对实际 DOM 的操作,提高了页面的渲染性能。而组件化开发使得开发者可以将 UI 拆分为独立的、可复用的组件,从而提高了代码的可维护性和重用性,加快了开发速度。

二、React 的基本使用

hello React

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>hello_react</title>
</head>
<body>
	<!-- 准备好一个“容器” -->
	<div id="test"></div>

	<!-- 引入react核心库 -->
	<script type="text/javascript" src="../js/react.development.js"></script>
	<!-- 引入react-dom,用于支持react操作DOM -->
	<script type="text/javascript" src="../js/react-dom.development.js"></script>
	<!-- 引入babel,用于将jsx转为js -->
	<script type="text/javascript" src="../js/babel.min.js"></script>

	<script type="text/babel" > /* 此处一定要写babel */
		//1.创建虚拟DOM
		const VDOM = <h1>Hello,React</h1> /* 此处一定不要写引号,因为不是字符串 */
		//2.渲染虚拟DOM到页面
		ReactDOM.render(VDOM,document.getElementById('test'))
	</script>
</body>
</html>

相关 js 库

  1. react.js:React 核心库
  2. react-dom.js:提供操作 DOM 的 react 扩展库
  3. babel.min.js:解析 JSX 语法代码转为 JS 代码的库

创建 虚拟 DOM 的两种方式

  1. 纯 JS 方式(一般不用):React 提供了一些 API(如 createElement、createFactory 等)来手动创建虚拟 DOM。

    <!-- 准备好一个“容器” -->
    <div id="test"></div>
    
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom,用于支持react操作DOM -->
    <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>
    
  2. JSX 方式:JSX 是一种类似 HTML 的语法扩展,允许在 JavaScript 代码中直接编写类似 HTML 的结构。使用 JSX 可以更直观、更高效地创建虚拟 DOM

    <!-- 准备好一个“容器” -->
    <div id="test"></div>
    
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    
    <script type="text/babel" > /* 此处一定要写babel */
    	//1.创建虚拟DOM
    	const VDOM = (  /* 此处一定不要写引号,因为不是字符串 */
    		<h1 id="title">
    			<span>Hello,React</span>
    		</h1>
    	)
    	//2.渲染虚拟DOM到页面
    	ReactDOM.render(VDOM,document.getElementById('test'))
    </script>
    

虚拟 DOM 与真实 DOM

  1. 虚拟 DOM 和真实 DOM 是两种表示页面结构的方式。虚拟 DOM 作为一个轻量级的 JavaScript 对象存在,可以在内存中进行操作和比较,而真实 DOM 则是浏览器中实际的页面元素

  2. 虚拟 DOM 的好处是可以减少对真实 DOM 的操作,减小了 DOM 操作的成本,从而提高了页面的性能。因为虚拟 DOM 中只包含了发生变化的部分,所以在进行 diff 算法比较时可以更快速地确定需要更新的部分

  3. 当虚拟 DOM 发生改变时,React 会通过 diff 算法找出需要更新的部分,并把这些变化应用到真实 DOM 上,从而实现页面的更新

  4. 关于虚拟DOM:

    • 本质是 Object 类型的对象(一般对象)

    • 虚拟 DOM 比较“轻”,真实 DOM 比较“重”,因为虚拟 DOM 是 React 内部在用,无需真实 DOM 上那么多的属性

    • 虚拟 DOM 最终会被 React 转化为真实 DOM,呈现在页面上

<!-- 准备好一个“容器” -->
<div id="test"></div>
<div id="demo"></div>

<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom,用于支持react操作DOM -->
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<!-- 引入babel,用于将jsx转为js -->
<script type="text/javascript" src="../js/babel.min.js"></script>

<script type="text/babel" > /* 此处一定要写babel */
	//1.创建虚拟DOM
	const VDOM = (  /* 此处一定不要写引号,因为不是字符串 */
		<h1 id="title">
			<span>Hello,React</span>
		</h1>
	)
	//2.渲染虚拟DOM到页面
	ReactDOM.render(VDOM,document.getElementById('test'))

	const TDOM = document.getElementById('demo')
	console.log('虚拟DOM',VDOM);
	console.log('真实DOM',TDOM);
	console.log(typeof VDOM);
	console.log(VDOM instanceof Object);
</script>

三、React JSX

简介

  1. 全称: JavaScript XML
  2. react 定义的一种类似于 XML 的 JS 扩展语法:JS + XML 本质是 React.createElement(component, props, …children) 方法的语法糖
  3. 作用:用来简化创建虚拟 DOM
    • 写法:var ele = <h1>Hello JSX!</h1>
    • 它不是字符串, 也不是 HTML/XML 标签
    • 它最终产生的就是一个 JS 对象
  4. 标签名任意:HTML 标签或其它标签
  5. 标签属性任意:HTML 标签属性或其它
  6. babel.js的作用
    • 浏览器不能直接解析 JSX 代码, 需要 babel 转译为纯 JS 的代码才能运行
    • 只要用了 JSX,都要加上type="text/babel" , 声明需要 babel 来处理
  7. 基本语法规则
    • 定义虚拟 DOM 时,不要写引号
    • 标签中混入JS表达式时要用 {}
    • 样式的类名指定不要用 class,要用 className
    • 内联样式,要用style={{key:value}}的形式去写
    • 只有一个根标签
    • 标签必须闭合
    • 标签首字母
      • 若小写字母开头,则将该标签转为 html 中同名元素,若 html 中无该标签对应的同名元素,则报错
      • 若大写字母开头,react 就去渲染对应的组件,若组件没有定义,则报错

示例

<!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>

	<!-- 引入react核心库 -->
	<script type="text/javascript" src="../js/react.development.js"></script>
	<!-- 引入react-dom,用于支持react操作DOM -->
	<script type="text/javascript" src="../js/react-dom.development.js"></script>
	<!-- 引入babel,用于将jsx转为js -->
	<script type="text/javascript" src="../js/babel.min.js"></script>

	<script type="text/babel" >
		const myId = 'aTgUiGu'
		const myData = 'HeLlo,rEaCt'

		//1.创建虚拟DOM
		const VDOM = (
			<div>
				<h2 className="title" id={myId.toLowerCase()}>
					<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
				</h2>
				<h2 className="title" id={myId.toUpperCase()}>
					<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
				</h2>
				<input type="text"/>
			</div>
		)
		//2.渲染虚拟DOM到页面
		ReactDOM.render(VDOM,document.getElementById('test'))
	</script>
</body>
</html>

渲染虚拟 DOM 元素

  1. 语法:ReactDOM.render(virtualDOM, containerDOM)
  2. 作用:将虚拟DOM元素渲染到页面中的真实容器DOM中显示
  3. 参数说明
    • 参数一:纯 js 或 jsx 创建的虚拟 DOM 对象
    • 参数二:用来包含虚拟 DOM 元素的真实 DOM 元素对象(一般是一个div)

JSX 练习

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>jsx小练习</title>
</head>
<body>
	<!-- 准备好一个“容器” -->
	<div id="test"></div>
	
	<!-- 引入react核心库 -->
	<script type="text/javascript" src="../js/react.development.js"></script>
	<!-- 引入react-dom,用于支持react操作DOM -->
	<script type="text/javascript" src="../js/react-dom.development.js"></script>
	<!-- 引入babel,用于将jsx转为js -->
	<script type="text/javascript" src="../js/babel.min.js"></script>

	<script type="text/babel" >
		//模拟一些数据
		const data = ['Angular','React','Vue']
		//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>

未完待续…
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值