一、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">
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 = {
name:'张三',
sex:'女',
age:19
}
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">
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'
]
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';
class App extends Component{
render(){
return (
<div>
<FriendList></FriendList>
</div>
)
}
}
export default App;
十二、props 和 stata
props : 父组件传递过来的参数
state : 组件自身状态 setState 在 state 定义的数据要想改变,直接操作是不行的,需要 this.setState({}) 方法,才可以改变 多个 setState 合并
props 与 state 的区别 :
state 的主要作用是用于组件保存、控制、修改 自己 的可变状态,在组件内部进行初始化,也可以在组件内部进行修改,但是组件外部不能修改组件的 state
props 的主要作用是让使用该组件的父组件可以传入参数来配置该组件,它是外部传进来的配置参数,组件内部无法控制也无法修改
state 和 props 都可以决定组件的外观和显示状态。通常,props 做为不变数据或者初始化数据传递给组件,可变状态使用 state
十三、总结
????????今天一整天的 react 学习收获满满,虽然 vue 和 react 都是目前市场十分火热前端框架,但是有些公司却会根据情况使用不同的框架.如果你想有进步,有提升空间,这些都是我们前端人员必须要掌握的.vue 常用于 中小型项目,而 react 常用于 中大型项目. 也认识到了 react 与 vue 相比之下比较神奇的地方,明天我会继续分享我的学习内容.
|