Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React知识图谱

React知识图谱

原创
作者头像
李才哥
发布于 2023-06-25 08:30:10
发布于 2023-06-25 08:30:10
6720
举报
文章被收录于专栏:李才哥李才哥

React知识图谱

组件化

状态值:组件内用到,并且会发生更新,一旦状态值更新,会引起组件重新渲染。

类组件 this.state

函数组件 useState、useReducer

数据跨层级传递:Context

使用方式三步走

  • 1. 创建Context对象
  • 2. 使用Context.Provider传递value
  • 3. Provider的子组件消费value

• contextType:只能用在类组件,只能订阅单一的context来源 • useContext:只能用在函数组件或者自定义hook中 • Context.Consumer

HOC:高阶组件是参数为组件,返回值为新组件的函数。

Antd3 Form、react-redux connect、react-router withRouter等

传送门createPortal

ReactDOM.createPortal(child, container); 一种将子节点渲染到 DOM 节点中的方式

Hook:React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

规则1:不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层调用他们。规则2:只能在函数组件或者自定义hook中使用hook函数。

useState

const [state, setState] = useState(initialState); 返回一个 state,以及更新 state 的函数。

useReducer

const [state, dispatch] = useReducer(reducer, initialArg, init); 类似useState。试想这样一个场景,state更新条件复杂,这个时候如果使用useState,那么执行setState的函数时候就会比较臃肿,这个臃肿的函数也很难实现复用。这个时候,可以考虑使用useReducer了,把state更新规则写在一个reducer函数中,这样不仅reducer可以复用,并且组件中也没有复杂的state修改规则。

useEffect

接收一个包含命令式、且可能有副作用代码的函数。默认情况下,effect 将在每轮渲染结束后执行,但我们可以通过控制依懒值选择让它只有某些值改变的时候才执行。可以类比类组件的componentDidMount、componentDidUpdate和componentWillUnmount。

useLayoutEffect

其函数签名与 useEffect 相同,但它会在所有的 DOM 变更之后同步调用 effect。使用场景如react-redux的connect。

useContext

接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值。

useCallback

缓存函数

useMemo

缓存参数

useRef

返回的 ref 对象在组件的整个生命周期内保持不变。

  • 使用场景如Antd4 Form实现useForm的时候。

useImperativeHandle

useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。使用场景如Antd4 Form实现Form的时候。

状态管理库

redux:函数式编程

  • redux是JavaScript应用的状态容器。它保证程序行为一致性且易于测试。

• createStore 创建store • reducer 初始化、修改状态函数 • getState 获取状态值 • dispatch 提交更新 • subscribe 变更订阅 • 常见中间件 • 异步 • redux-thunk:使用简单,但是容易形成“嵌套地狱” • redux-saga:使用“复杂”,但是能够用同步的方式实现异步,内部使用了generator函数,比async await功能更丰富 • redux-observable:基于rxjs,学习成本较高 • 状态更新日志 • redux-logger • 处理promise • redux-promise

mobx:响应式编程

mobx通过透明的函数响应式编程使得状态管理变得简单和可扩展。

  • 1. 定义状态并使其可观察

• observable

  • 2. 创建视图以响应状态的变化

• observer HOC • 返回响应式组件,它可以自动追踪哪个可观察量被使用了以及当值改变的时候自动重新渲染这个组件。 • Observer component • 只能使得它自己的返回组件是响应式的,如果你里面还嵌套了别的组件,那这个里面的组件得靠自己变成响应式~ • useObserver hook • 优点:任何的hook改变observable,组件都不会重复渲染。 • 缺点:就算是在组件的某一部分使用,但是却能引起组件的全部更新~,所以慎用,如果想要精细控制的话,还是要选择或者useForceUpdate。

  • 3. 更改状态

• action • 建议对任何修改 observables 或具有副作用的函数使用action。 结合开发者工具的话,动作还能提供非常有用的调试信息。

recoil:融合React自身(目前还处于实验阶段)

recoil是Facebook开发的状态管理库,目标是做一个高性能的状态管理库,并且可以使用React内部的调度机制,包括会支持并发模式。

以上三者对比

redux是集中式管理state,而recoil和mobx都是分散式。

recoil中状态的读写都是Hooks函数,目前没有提供类组件的使用方式。

recoil是Facebook开发的,可以使用React内部的调度机制,这是redux和mobx不支持的。

recoil目前还是实验阶段,想要应用到的自己的项目中,等待正式版发了再说吧。

共同点

  • 爱用不用。目前任何一个状态管理库都不是强制使用的,也有很多精小的项目不使用第三方状态管理库,而只是使用React自身的state、useContext等API就可以达到目的。当然,对于大型项目,个人还是建议使用一个状态管理库,毕竟项目越大,需要管理、共享的状态越多,这个时候为了避免data层与view层变成一锅粥,还是使用个状态管理库吧。

路由管理库

react-router 目前最新版本是5.2.0: 根据url与组件的映射关系切换组件的显示

Router

  • BrowserRouter:使用 HTML5 提供的 history API (pushState, replaceState和popstate事件) 来保持 UI 和 URL 的同步。
  • HashRouter:使用 URL 的 hash 部分(即 window.location.hash)来保持 UI 和 URL 的同步。
  • MemoryRouter:把 URL 的历史记录保存在内存中的 (不读取、不写入地址栏)。在测试和非浏览器环境中很有用,如React Native

Route

  • 渲染组件

• children:func • 不管与path匹配与否都渲染 • component:component • 匹配才会渲染 • render:func • 匹配才会渲染

Switch

  • 渲染与该地址匹配的第一个子节点 或者 。

Redirect

  • 渲染 将使导航到一个新的地址。

Link

  • 跳转组件

NavLink

  • 一个特殊版本的 Link,当它与当前 URL 匹配时,为其渲染元素添加样式属性。

Redirect

  • 重定向。路由守卫时,会有到这个组件。

withRouter

  • HOC。可以通过它访问route props。

自定义hook方法

  • useHistory、useLocation、useRouteMatch、useParams

脚手架

create-react-app

FaceBook支持,它提供了一个零配置的现代构建设置。建议初学者自己学习的时候用这个架子入手,但是不建议用到公司项目中去,因为用cra对开发者要求比较高,因为需要从0开始,比如状态管理、路由管理、webpack等都需要自己配置,对初学者来说难度有点大,别给自己挖坑了还是,可以使用umi,umi基本上不需要额外配置。当然,老手随便。

dva

是一个基于 redux 和 redux-saga 的数据流方案。对于学习来说,这是个不错的框架,源码也很短,不过从github上能看出来,维护度有点低,虽然有很多项目基于纯dva开发,不过也不是很建议初级开发者使用这个做公司项目,因为还是需要你自己去做很多配置,要求也比较高。当然,老手随便。

umi

可扩展的企业级前端应用框架。深度整合了Antd和dva,内置了路由、构建、部署、测试等,仅需一个依赖即可上手开发。并且还提供针对 React 的集成插件集,内涵丰富的功能,可满足日常很多的开发需求。当然缺点也很明显,他什么都给你封装好了,如果你还想自己写webpack,那就不要选择umi了。老少皆宜。

next

挺好的。只是如果你不会国际化、权限、数据流、配置式路由等问题,还是不要用了。

组件库

Antd

蚂蚁的,使用很广泛,风格素雅简洁。

Antd-Mobile

用于移动端,比Antd差很多,不过最近正在重构,期待吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
各流派 React 状态管理对比和原理实现
在 React 诞生之初,Facebook 宣传这是一个用于前端开发的界面库。在大型应用中,如何处理好 React 组件通信和状态管理就显得非常重要。
尹光耀
2022/03/22
3.1K0
各流派 React 状态管理对比和原理实现
React-hooks面试考察知识点汇总
React 没有提供将可复用性行为“附加”到组件的途径(例如,把组件连接到 store)。有一些解决此类问题的方案,比如 render props 和 高阶组件。但是这类方案需要重新组织你的组件结构,这可能会很麻烦,使你的代码难以理解。
beifeng1996
2022/10/06
1.4K0
用动画和实战打开 React Hooks(三):useReducer 和 useContext
随着应用状态越来越复杂,我们迫切需要状态与数据流管理的解决方案。熟悉 React 开发的同学一定听说过 Redux,而在这篇文章中,我们将通过 useReducer + useContext 的组合实现一个简易版的 Redux。首先,我们将带你重新认识“老朋友”useState,并借此引出这篇文章的主角:Reducer 函数与 useReducer 钩子,并通过实战一步步带你理清数据流和状态管理的基本思想。
一只图雀
2020/05/08
1.6K0
Facebook 新一代 React 状态管理库 Recoil
在 React Europe 2020 Conference 上, Facebook 软件工程师 Dave McCabe 介绍了一个新的状态管理库 Recoil。
ConardLi
2020/10/10
1.7K0
Facebook 新一代 React 状态管理库 Recoil
React-Redux 100行代码简易版探究原理。
各位使用 react 技术栈的小伙伴都不可避免的接触过redux + react-redux的这套组合,众所周知 redux 是一个非常精简的库,它和 react 是没有做任何结合的,甚至可以在 vue 项目中使用。
ssh_晨曦时梦见兮
2020/10/15
7400
问:你是如何进行react状态管理方案选择的?
前言:最近接触到一种新的(对我个人而言)状态管理方式,它没有采用现有的开源库,如redux、mobx等,也没有使用传统的useContext,而是用useState + useEffect写了一个发布订阅者模式进行状态管理,这一点对我来说感觉比较新奇,以前从没接触过这种写法,于是决定研究一下目前比较常用的状态管理方式。
beifeng1996
2022/10/10
3.6K0
React-全局状态管理的群魔乱舞
而从根本上讲,「React 是一个用于构建用户界面的 JavaScript 库」。
前端柒八九
2022/08/25
3.9K0
React-全局状态管理的群魔乱舞
React useReducer 终极使用教程
useReducer 是在 react V 16.8 推出的钩子函数,从用法层面来说是可以代替useState。相信前期使用过 React 的前端同学,大都会经历从 class 语法向 hooks 用法的转变,react 的 hooks 编程给我们带来了丝滑的函数式编程体验,同时很多前端著名的文章也讲述了 hooks 带来的前端心智的转变,这里就不再着重强调,本文则是聚焦于 useReducer 这个钩子函数的原理和用法,笔者带领大家再一次深入认识 useReducer。
蒋川@卡拉云
2022/08/31
3.9K0
React useReducer 终极使用教程
2023再谈前端状态管理
状态是表示组件当前状况的 JS 对象。在 React 中,可以使用 useState 或者 this.state 维护组件内部状态,通过 props 传递给子组件使用。
zz_jesse
2023/08/21
1.1K0
2023再谈前端状态管理
React Hook丨用好这9个钩子,所向披靡
[raect] React Hook 指南 什么是 Hook ? Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 Hook 本质上就是一个函数,它简洁了组件,有自己的状态管理,生命周期管理,状态共享。 useState useEffect useContext useReducer Hook 出现解决了什么 ? 组件之间状态复用, 例如:使用useContext 可以很好的解决状态复用问题,或者自定义Hook 来定制
程序员海军
2022/02/15
3.2K0
React Hook丨用好这9个钩子,所向披靡
谈谈 React 5种最流行的状态管理库
原文:sourl.cn/F95CrZ,代码仓库地址: https://github.com/dabit3/react-state-5-ways
秋风的笔记
2020/10/27
2.8K0
React-Redux 100行代码简易版探究原理。(面试热点,React Hook + TypeScript实现)
各位使用react技术栈的小伙伴都不可避免的接触过redux + react-redux的这套组合,众所周知redux是一个非常精简的库,它和react是没有做任何结合的,甚至可以在vue项目中使用。
ssh_晨曦时梦见兮
2020/04/11
2.2K0
React-Redux 100行代码简易版探究原理。(面试热点,React Hook + TypeScript实现)
精读《React Hooks》
React Hooks 是 React 16.7.0-alpha 版本推出的新特性,想尝试的同学安装此版本即可。
ConardLi
2019/09/08
1.2K0
【react】203-十个案例学会 React Hooks
原文地址:https://github.com/happylindz/blog/issues/19
pingan8787
2019/07/23
3.2K0
React Hook
在传统的 class 中,会使用 componentDidMount 和 componentDidUpdate 获取数据。同时 componentDidMount 中也会处理一些其他的事务,例如事件监听,定时器等等。而后还需要在 componentWillUnmount 中取消。万一忘记其中某一个部分或者处理的时间过多,很可能导致一些可怕的bug。
踏浪
2020/01/17
2K0
「React 进阶」 React 全部 Hooks 使用大全 (包含 React v18 版本 )
React hooks是react16.8 以后,react新增的钩子API,目的是增加代码的可复用性,逻辑性,弥补无状态组件没有生命周期,没有数据管理状态state的缺陷。本章节笔者将介绍目前 React 提供的所有 hooks ,介绍其功能类型和基本使用方法。
用户6835371
2022/09/21
3.4K0
「React 进阶」 React 全部 Hooks 使用大全 (包含 React v18 版本 )
React组件设计实践总结04 - 组件的思维
在 React 的世界里”一切都是组件“, 组件可以映射作函数式编程中的函数,React 的组件和函数一样的灵活的特性不仅仅可以用于绘制 UI,还可以用于封装业务状态和逻辑,或者非展示相关的副作用, 再通过组合方式组成复杂的应用. 本文尝试解释用 React 组件的思维来处理常见的业务开发场景.
_sx_
2019/08/07
2.4K0
React组件设计实践总结04 - 组件的思维
React系列-自定义Hooks很简单
不明白Redux工作流的同学可以看看这篇Redux系列之分析中间件原理(附经验分享)
落落落洛克
2021/01/08
2.2K0
React系列-自定义Hooks很简单
如何在 React 应用中使用 Hooks、Redux 等管理状态
大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 点此扫码加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。
若川
2022/11/11
8.8K0
如何在 React 应用中使用 Hooks、Redux 等管理状态
深入浅出 React Hooks
Hooks 顾名思义,字面意义上来说就是 React 钩子的概念。通过一个 case 我们对 React Hooks 先有一个第一印象。
桃翁
2019/06/12
2.6K0
相关推荐
各流派 React 状态管理对比和原理实现
更多 >
LV.2
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档