这是我参与「第四届青训营 」笔记创作活动的第30天
React 历史及应用
应用场景
- 前端应用开发 | Web 端
- 移动原生应用开发
- 桌面应用开发(联合 electron)
历史
- 2010 引入 xhp 框架
- 2011 创建 FaxJS 即 React 的原型 Reactive | Structural | Performant | Seamless Client Server Rendering
- 2012 创建 React
- 2013 React 正式开源
- 2014至今 React 生态爆发
React 设计思路
-
响应式编程
- 状态更新
- 前端代码组件化
- 状态之间的互相依赖关系
-
组件化
- 组件是组件的组合或原子组件
- 组件内有状态 states
- 父组件可向组件内部传入状态 props
-
状态归属
- 组件声明状态和UI映射
- 组件有 props 和 state 两种状态
- 组件可由其他组件构成
-
生命周期
- mount
- update
- unmount
React 写法
hooks 写法
import React, { useState } from 'react';
function Example () {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Click ${count} times`;
});
return (
<div>
<p>{count}</p>
<button onClick={() => setCount(count+1)}>
click
</button>
</div>
);
}
复制代码
React 实现
-
JSX
-
Virtual DOM 声明式编程
-
Diff 算法
- 更新次数少 | 计算速度快
- 不同类型元素 - 替换
- 同类型DOM元素 - 更新
- 同类型组件元素 - 递归
React 状态管理库
核心思想
将状态抽离到 UI 外部统一进行处理
类型
Redux xstate mobx recoil
状态机
应用级框架
全栈开发框架
Next.js
Modern.js
Blitz next是一款用JS开发的全栈框架,它是基于express框架基础上开发而成,可以用react写客户端,node.js写服务端。一份代码可在前后端同时运行,这在next中称之为同构!
一些next.js框架基础介绍 创建项目:npm init next-app 项目名,项目创建好后next会帮你搭好基础通用的模板,大多常用的api以及写法都能在模板中找到。
自定义head:使用组件可自定义<meta>标签和内容组件导入。
// 文件路径 page/_app.js
import Head from "next/head";
import '../styles/globals.scss'
export default function App({ Component, pageProps }) {
return <>
<Head>
<title>我的博客 A-Tione</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"/>
</Head>
<Component {...pageProps} />
</>
}
快速导航:标准写法<Link href=xxx><a>xxx</a></Link>,在next中通过标签的href链接定位路由可实现预加载路由页面,可使点击跳转无需发送请求。
同构代码:一份代码两端运行,在一处使用console.log调试,可在服务端和客户端页面都显示出log,这样更方便调试。但请注意同构代码时需要使用前后端都存在的对象,比如window、document等客户端才有的对象就无法在服务端log出来。
局部css:因为next是与react配套使用的,我们可用这样写css:<style jsx> 或者 xxx.module.css文件。
全局组件:若需要多处地方使用到同一组件,可使用全局组件,全局组件在路径page/_app.js中声明。