React入门

一、react开始

1、react是什么

用于构建用户界面的JavaScript库

操作DOM呈现页面

(发送请求获取数据和处理数据不由react处理)fessbook开发

2、为什么要学

原生js操作DOM繁琐、效率低

使用原生js直接操作DOM,浏览器会进行大量重绘重排

原生js没有组件化编码方案,代码复用率低

3、react特点

采用组件化模式,声明式编码,提高开发效率及组件复用率

在React Native中可以使用react语法进行移动端开发

使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互

4、JScript基础

判断this指向

class(类)

ES6语法规范

npm包管理器

原型、原型链

数组常用方法

模块化

二、使用

1、引入下列三个js

react.development.js

react-dom.development.js

babel.min.js

2、创建DOM

js方式创建虚拟DOM:

React.createElement(标签名,标签属性,标签内容)创建虚拟DOM

document.createElement()创建真实DOM

jsx更简洁

3、虚拟DOM

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

虚拟DOM属性少,真实DOM属性多,因为虚拟DOM是react内部在用,无需真实DOM上的那么多属性

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

4、jsx

js+xml,属于JScript的扩展

定义虚拟DOM不写引号

标签中混入js表达式要用{}

样式的类名指定不用class用className

内联样式,用style={{key:value}}

只有一个根标签

标签必须闭合

5、组件

函数式组件首字母大写

类式组件

类中的构造器非必写,

6、组件实例的三大核心属性

state(状态):状态不可直接更改,须用setState()更新

render中的this为组件实例对象

props:组件外传值与批量传值

可以加属性规则

函数式组件只能使用props属性,除非使用hooks

refs:类似原生的元素id,refs为一组ref值;

字符串形式的ref存在效率问题,已经弃用;

回调函数形式的ref,(如果内置函数则执行两次,第一次为null)

createRef用多少创建多少

7、react事件处理

8、收集表单数据

受控组件与非受控组件

9、高阶函数--函数柯里化

10、组件的生命周期

常用的生命周期函数

didMount

render

willUnmount

新版生命周期新增的两个生命周期:

getDerivedStateFromProps()、getSnapshotBeforeUpdate()

11、DOM的Diff算法

虚拟DOM中唯一标识key的作用

破坏顺序时可能错位,引起效率问题,可使用id等唯一值代替

12、react脚手架

借助webpack

react+webpack+es6+eslint

模块化、组件化、工程化

13、样式的模块化

14、组件化编码

拆分组件

实现静态组件

实现动态组件(初始化数据,交互)

15、组件传值

父传子:props

子传父:父组件先用props传函数给子组件,接着子组件调此函数传值給父组件即可

状态state在哪里,操作state的方法就在哪

16、react ajax

建议使用轻量级axios,已经封装xmlhttprequest

使用ajax会产生跨域,需要代理解决(package.json文件配置单个proxy)

配置多个代理在SRC根文件新建setupProxy.js(http-proxy-middleware)

17、兄弟(或任意)组件传值

消息订阅-发布机制(PubSubjs)

先订阅,再发布

需要在componentWillUnmount中取消订阅

18、发送请求方式

xhr:设计粗糙的API,不符合关注分离原则

fetch:原生函数,有的老版本浏览器不支持,不常用

19、单页面应用SPA(路由)

20、前端路由

BOM(history)HTML5新增的historyAPI

21、react路由(react-router-dom)

①一级路由

link

NvLink(通过this.prps.children可以拿到标签体内容)

Switch单一匹配,path与component一一对应

②路由的精准匹配和模糊匹配

Redirect Redirect重定向(最下方)

二级路由(嵌套路由)

③子级路由需要加父级路由path

向路由组件传递参数

④向路由组件传递params参数(声明,接收,在props取)this.props.location.params

⑤向路由组件传递search参数(不用声明,正常注册路由,在props取,最后借助querystring解析)this.props.location

⑥向路由组件传递state参数(不用声明,正常注册路由(路由对象),在props取)this.props.location.state

路由栈的push(默认)与replace(按需开启)模式

编程式路由

利用this.props.history对象里的API前进回退

withRouter可以加工一般组件加,让其拥有路由组件所具有的API

BrowserRouter与HashRouter

底层原理:

BrowserRouter封装了HTML5提供的historyAPI

HashRouter使用的是URL的哈希值

path:

BrowserRouter不带#;HashRouter带了#

刷新后对路由state的影响:

BrowserRouter不影响,state保存在history对象中;

HashRouter刷新后会导致路由state参数丢失

22、UI(antd)

ANT-Design

三、redux

专门用于状态管理的js库

集中式管理多个组件共享的状态

同步action:object一般对象

异步action:function函数,即action的返回值为函数(需要引入redux-thunk支持异步action),一般异步action中会调用同步action

react-redux

优化

前端打包

本地serve build模拟服务器,部署打包后的资源浏览器查看

react状态更新是异步(两种形式)

react路由组件的lazyload

react函数式组件的hooks

React.useState()可以使用state

React.useEffect()可以模拟使用生命周期钩子

React.useRef()

React中Fragment

Fragment标签可在编译时忽略该节点

React中Context

一种组件间通信方式,祖组件和后代组件通信

需要引入provider和consumer

React中PureComponent

重写了shouldComponentUpdate,提升了性能

React中render props

React中errorBoundary

错误边界,一般在父组件使用

React中组件通信方式

React router 6

已推荐使用函数式组件

有很多开箱即用的API,如:

useParams()

useSearchParams()

useLocation()

等!

相关推荐
Martin -Tang34 分钟前
vite和webpack的区别
前端·webpack·node.js·vite
迷途小码农零零发34 分钟前
解锁微前端的优秀库
前端
王解1 小时前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js
老码沉思录1 小时前
写给初学者的React Native 全栈开发实战班
javascript·react native·react.js
老码沉思录2 小时前
React Native 全栈开发实战班 - 第四部分:用户界面进阶之动画效果实现
react native·react.js·ui
我不当帕鲁谁当帕鲁2 小时前
arcgis for js实现FeatureLayer图层弹窗展示所有field字段
前端·javascript·arcgis
那一抹阳光多灿烂2 小时前
工程化实战内功修炼测试题
前端·javascript
放逐者-保持本心,方可放逐2 小时前
微信小程序=》基础=》常见问题=》性能总结
前端·微信小程序·小程序·前端框架
毋若成5 小时前
前端三大组件之CSS,三大选择器,游戏网页仿写
前端·css
红中马喽5 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习