一、React 是什么?
1. React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript库
2. 使用 React 可以将一些简短、独立的代码片段组合成复杂的UI界面,这些代码片段被称为”组件”
3. React 是用于渲染 UI 的 JS 库,定位在与实现 UI
4. React Web App 解决方案,衍生的 React Native 是跨屏 App 解决方案
二、React 的特点?
-
声明式设计 : React 采用声明范式,可以轻松描述应用。
-
高效 : React通过对 DOM 的模拟,最大限度地减少与 DOM 的交互。
-
灵活 : React 可以与已知的库或框架很好地配合。
-
JSX :一种独立的语言,试图解决很多JS的缺陷,ES6包含了几乎所有JSX的特性
-
组件 : 通过React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中,代码复用
-
单向响应式的数据流 : React 实现了单向相应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。
三、React 的优缺点?
优点 :
传统方法频繁操作DOM,性能无法达到要求;React使用VDOM,性能高
传统JS代码维护成本高,React基于组件开发
需要支持移动端开发
缺点:
对于一直使用JS,jQuery的传统前端,React非常不友好
React强调组件和状态管理,其世界观是面向程序语言的
Vue.js强调视图的自动同步,其世界观是面向UI脚本的
React的学习成本较Vue.js高。
React没有全家桶,只做UI
四、引入 React 库
1. React.js框架本身包含两个部分:
react.js : 提供了React.js核心功能代码,如:虚拟dom、组件
React-dom.js : 提供了与浏览器交互的DOM功能,如:dom渲染
2. 在 script 中引入 React 框架有两种方式:
第一种 : 使用网址引入
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
第二种 : 使用文件夹中的文件引入
我将这个文件夹放在 百度网盘上,需要的兄弟萌可以自行去下载
链接:https://pan.baidu.com/s/1LP36Cjhm05z9WVH6nioH9A
提取码:1234
五、React 简单案例
1. 我们正常创建一个 html 文件,然后引入 React.js 和 React-dom.js,然后进行编写代码
<!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>
<script src="./js/react.development.js"></script>
<script src="./js/react-dom.development.js"></script>
</head>
<body>
<div id="box"></div>
<script>
ReactDOM.render(
'第一次使用 react 框架',
document.querySelector('#box'),
()=>{
console.log('使用成功')
}
)
</script>
</body>
</html>
2. 打开浏览器,会发现 id 为 box 的 标签,里面成功插入了我们指定的内容,并且在控制台打印 “使用成功”
六、JSX 是什么?
JSX 是一个基于 JavaScript + XML 的一个扩展语法
它可以作为值使用
它并不是字符串
它也不是HTML
它可以配合JavaScript 表达式一起使用
函数中不能解析标签,可以执行两步操作使用 JSX,让它解析,不然会报错
一. 在头部引入 babel.min.js (在上面的百度网盘中我也放入了这个文件)
二. 在 script 中写入 type 类型, 定义为 text/babel 就可以解析了
3. 代码实例
<!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>
<script src="./js/react.development.js"></script>
<script src="./js/react-dom.development.js"></script>
<script src="./js/babel.min.js"></script>
</head>
<body>
<div id="box"></div>
<script type="text/babel">
/*
JSX : 基于 javascript 和 xml 的扩展语法
函数中不能解析标签,可以执行两步操作,让它解析
一. 在头部引入 babel.min.js
二. 在 script 中写入 type 类型, 定义为 text/babel 就可以解析了
*/
ReactDOM.render(
<header>
<h1>hello react</h1>
<p>利用JSX来渲染</p>
</header>,
document.querySelector('#box'),
()=>{
console.log('使用成功')
}
)
</script>
</body>
</html>
七、插值表达式 {}
1. 在 react 中,不会像 vue 那样在 data 中 定义我们的值,而是随便一个 定义一个变量值我们就可以使用.当然,使用的时候,也是像 vue 那样使用 花括符{},vue 使用的 两个花括符{{}},但是要注意的是,在 react 中插值表达式只使用一个花括符{},代码及注意点如下 :
<!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>
<script src="./js/react.development.js"></script>
<script src="./js/react-dom.development.js"></script>
<script src="./js/babel.min.js"></script>
</head>
<body>
<div id="box"></div>
<script type="text/babel">
// let data = "今天天气很好~"; // 原样输出
// let data = 1; // 原样输出
// let data = false; // 不输出
// let data = undefined; // 不输出
// let data = null; // 不输出
// let data = ['内容1','内容2','内容3']; // 输出 数组里面的内容,但是去掉了 ","
let data = {
name:'张三',
sex:'女',
age:19
}
// 直接 data ,不会输出任何内容,并且会报错,但是 .属性,就可以输出内容
// 注意 :
// 在 react 中插值表达式使用 {}
// 在 vue 中插值表达式使用 {{}}
ReactDOM.render(
<header>
<h1>{data.name}</h1>
<h1>{data.sex}</h1>
<h1>{data.age}</h1>
</header>,
document.querySelector('#box'),
()=>{
console.log('使用成功')
}
)
</script>
</body>
</html>
2. 我们在浏览器中查看
八、条件输出
1. 条件输出,我们有些时候用来做一些判断,让某些值显示,代码如下 :
<script type="text/babel">
// ? : 三元表达式 相当于 if else
// || 或 逻辑 相当于 if(!) 取反
// && 与 逻辑 相当于 if()
ReactDOM.render(
<header>
<h1>{false ? '成立' : '不成立'}</h1>
<p>{true || '利用JSX来渲染'}</p>
<div>{true && "正确"}</div>
</header>,
document.querySelector('#box'),
()=>{
console.log('使用成功')
}
)
</script>
2. 我们来看浏览器
九、列表循环
1. 在 react 中 列表循环 和 vue 中的写法大然不同,不像 vue,使用 v-for 就可以了,在 react 中将定义好的数据进行 forEach 或者 map 列表循环. 代码及注意点如下 :
<!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>
<script src="./js/react.development.js"></script>
<script src="./js/react-dom.development.js"></script>
<script src="./js/babel.min.js"></script>
</head>
<body>
<div id="box"></div>
<script type="text/babel">
let data = [
'内容1',
'内容2',
'内容3',
'内容4'
]
// 在普通函数中 定义渲染 (使用 forEach 方法)
// function toData(){
// let arr = [];
// data.forEach((item)=>{
// arr.push(<li>{item}</li>)
// })
// return arr;
// }
// ReactDOM.render(
// <header>
// {toData()}
// </header>,
// document.querySelector('#box'),
// ()=>{
// console.log('使用成功')
// }
// )
// 在 react 虚拟dom 函数中 定义渲染 (使用 map 方法),不然会报错
ReactDOM.render(
<header>
{
data.map(item=>{
return <li>{item}</li>
})
}
</header>,
document.querySelector('#box'),
()=>{
console.log('使用成功')
}
)
</script>
</body>
</html>
2. 打开浏览器查看
十、自动化构建 React
使用上面的那种引入框架的方式不能体现到 react 框架组件的复用性,这个时候我们就要构建 React 了
安装 :
npm 安装 : npm i -g create-react-app
yarn 安装 : yarn global add create-react-app
创建项目:
create-react-app 项目名称
运行项目:
使用 npm start
注意:
你们在运行项目的时候,我不知道会不会报错,反正我是报错了,处理的方法如下 :
在 src 文件夹下创建一个 .env 同级文件,在里面放入以下代码,在执行 npm start 就可以成功运行了
SKIP_PREFLIGHT_CHECK=true
项目目录
react 的项目目录 和 vue 创建的项目目录 都差不多,这里就不再介绍了
十一、使用 React 创建类组件
import React,{Component} from 'react';
// 引入的 组件
import FriendList from './FriendList';
/*
类组件:
1. 组件类名必须继承 **React.Component**
2. 组件类必须有 **render** 方法
3. render 方法的 return 后 定义组件的内容
ps: 记得导出
*/
class App extends Component{
render(){
return (
<div>
<FriendList></FriendList>
</div>
)
}
}
export default App;
十二、props 和 state
props : 父组件传递过来的参数
state : 组件自身状态
setState 在 state 定义的数据要想改变,直接操作是不行的,需要 this.setState({}) 方法,才可以改变
多个 setState 合并
props 与 state 的区别 :
state 的主要作用是用于组件保存、控制、修改 自己 的可变状态,在组件内部进行初始化,也可以在组件内部进行修改,但是组件外部不能修改组件的 state
props 的主要作用是让使用该组件的父组件可以传入参数来配置该组件,它是外部传进来的配置参数,组件内部无法控制也无法修改
state 和 props 都可以决定组件的外观和显示状态。通常,props 做为不变数据或者初始化数据传递给组件,可变状态使用 state
十三、总结
今天一整天的 react 学习收获满满,虽然 vue 和 react 都是目前市场十分火热前端框架,但是有些公司却会根据情况使用不同的框架.如果你想有进步,有提升空间,这些都是我们前端人员必须要掌握的.vue 常用于 中小型项目,而 react 常用于 中大型项目. 也认识到了 react 与 vue 相比之下比较神奇的地方,明天我会继续分享我的学习内容.