中文官网: https://react.docschina.org/
英文官网:https://reactjs.org/
react是一个用于构建用户界面的开源JavaScript库。(操作DOM呈现页面)
由Facebook的软件工程师 Jordan Walke创建,于2011年部署于Facebook 的 newsfeed;2012年 部署于 Instagram;2013年 5 月宣布开源。
1.采用组件化模式、声明式编码,提高开发效率及组件复用率。
2.在React Native中可以使用 React 语法进行移动端开发。(JS可以写出来IOS\Android)
两种手机平台: IOS(OC Swift)、Android(java)
3.高效:使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互。
1.babel.min.js:作用是将jsx 转为 js
2.react.development.js:react的核心库,引入后全局有React对象
3.react-dom.development.js:react的扩展库,引入后全局有ReactDOM对象
用React官网CDN链接下载 react库
常用js库下载BootCDM
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
注意:
1.react核心库要在react-dom之前引入
2. 一定要写babel
3.创建虚拟DOM时不写引号,这是jsx的写法
4.渲染虚拟DOM的语法:ReactDOM.render(虚拟DOM, 容器)
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>hello_react</title>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="test"></div>
<!-- 引入react核心库,全局多了React对象 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom 用于支持react操作dom,全局多了ReactDOM对象 -->
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<!-- 引入babel 用于将jsx转为js -->
<script type="text/javascript" src="../js/babel.min.js"></script>
<!-- 此处一定要写babel,写的是jsx代码,由babel翻译 -->
<script type="text/babel">
// 1.创建虚拟DOM
const VDOM = <h1>Hello, React</h1>/* 此处不写引号,因为不是字符串 */
// 2.渲染虚拟DOM到页面: ReactDOM.render(虚拟DOM, 容器)
ReactDOM.render(VDOM, document.getElementById('test'))
</script>
</body>
</html>
1. 纯JS写法:React.createElement(标签名, 标签属性,标签内容)
const VDOM = React.createElement('h1', {id: 'title'}, 'Hello, React')
2.JSX方式:原始JS写法的语法糖
const VDOM = (
<h1 id="title">
<span>Hello, React</span>
</h1>
)
关于虚拟DOM
1.本质是Object 类型的对象(是React在内存中用于描述UI的JS对象)
2.虚拟DOM属性少,真实DOM属性多,因为虚拟DOM是React内部在用,无需那么多属性
3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上
JSX不是标准的ECMAScript语法,它是ECMAScript的语法扩展,需要使用babel编译处理后才能在浏览器中使用。
create-react-app 脚手架中已经默认有该配置,无需手动配置
编译JSX语法的包为:@babel/preset-react
style={{key:value}}
,属性名转为小驼峰<body>
<!-- 准备好一个容器 -->
<div id="container"></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 title = '前端JS框架列表'
const data = ['Angular','React', 'Vue']
const VDOM = (
<div>
<h2>{title}</h2>
<ul>
{
data.map((item, index) => {
return <li key={index}>{item}</li>
})
}
</ul>
</div>
)
ReactDOM.render(VDOM, document.getElementById('container'))
<body>
总结:
1.JSX可以自动遍历数组,但是无法展示Object结构且会报错"Object are not valid as a React child"
2.{}中只能写JS表达式,不能写JS语句
3.注意区分: 【JS语句】与【JS表达式】
1). a
2). a + b
3). demo(1) 函数调用表达式
4). arr.map()
5). function test() {}
1). if(){}
2). for(){}
3). switch() {case: xxx}
模块: 一个JS文件就是一个模块,作用:复用JS,简化JS,提高JS运行效率。
组件: 用来实现局部功能效果的代码和资源的集合(html/css/js/image 等等),作用:简化项目编码,提高运行效率。
模块化: 当应用的JS都是以模块化编写的,就是一个模块化的应用
组件化: 当应用是以多组件的方式实现,就是一个组件化的应用