React
生命周期
16 以后
16 之前
React Hook
为什么不能在 for 循环中使用
useState
setState
同步还是异步
事件合并
子树渲染、父树渲染
函数式组件和、类组件不同
HOC(高阶组件)
props render
性能优化
React.memo、useCallback、useMemo
shouldComponent、pureComponent
受控组件和非受控组件
fibber 机制
redux
redux 和 vuex 机制
SSR
React.lazy
思考
React 在我们的观点里,是用来构建大型快速的 web 应用最好的方式。它很好的适应了 Facebook 和 Instagram 的业务。
React 带来的好处,有一点是,它让你思考你所创建的应用。这个文档中,我们会带着你一起用 React 来创建一个带搜索功能的数据图表。
组件库
插件
- The simplest way to add authentication to your React app. Handles everything for you. Users, login forms, redirects, sharing state between components. Everything
第三方
- https://github.com/ReactML/ReactML
- https://github.com/ReactML/loader
- isomorphic-fetch
- react-router
- react-router-redux
layout
项目
- CRA:适合 SPA
- Next.js 、Gatsby:适合静态站点
- umiijs 阿里推的,只有国人用,生态会比前两者少
- umi 太重, 同是阿里的 ice 明显轻很多, 该有的都有
状态管理
- Redux:redux.js.org/
- Mobx:github.com/mobxjs/mobx
- Zusand:github.com/pmndrs/zust…
- Jotai:https://jotai.org/
- jotai 很好,但有个问题(也可能不是),就是你用一个 atom ,比如 [a, setA] = useAtom(aAtom),你写 100 个组件里面的 a 名字就都不一样,但是用的 aAtom 是一个,这样在重构的时候很容易发生疏漏。当然回到我之前说也可能不是问题的问题那句话,可能这就是分布式应有的风格,所以我也无法过多评论。
- XState:github.com/statelyai/x…
- Recoil:github.com/facebookexp…
- reselect
- redux-saga
- valtio
- reactivue
- easy-peasy
- https://github.com/dai-shi/use-context-selector
- resso
- redux-alita
- convex
状态管理库的变化,大致可分为 3 个阶段
-
一开始由 Flux 架构的开源实现流行起来的 Redux ,令人烦躁的点在于模板代码太多,后续的 RTK ( Redux Tool Kit )只能说是提供了一些类似语法糖 API 糖一样的做法来尽量减少模板代码,治标不治本。
-
为了改进或者替代 Redux 的产品 mobx valtio(proxy state) zustand 等等,排名不分先后
-
Recoil/Jotai(Atom state) 主张状态从底往上组合,区别于 Redux 等工具的中心化然后再通过 reducer 自顶往下的做法; react-query 提出不应该是 global state ,应该是 server state + client state ,它负责解决 server state ,剩下的 client state 已经少得可怜,可自行选用工具解决(recoil 推荐)
数据请求
React Query 最初是为使用 REST API 而设计的,但是现在它也支持了 GraphQL。然而如果你正在为你的 React 项目寻找专门的 GraphQL 库,我还是推荐你去看看 Apollo Client(当前最流行的)、urql(轻量级)或 Relay(Facebook 维护)。
如果你已经在使用 Redux,并且想要在 Redux 中添加集成状态管理的数据请求功能,建议你看看 RTK Query,它将数据请求的功能更巧妙的集成到 Redux 中。
建议:
- React Query(REST API、GraphQL API 都有)
- Apollo Client(只有 GraphQL API)
- 可选的学习经验:了解 React Query 的工作原理
链接:
- React Query:react-query.tanstack.com/
- Apollo Client:http://www.apollographql.com/docs/react/
- urql:formidable.com/open-source…
- Relay:github.com/facebook/re…
- RTK Query:redux-toolkit.js.org/rtk-query/o…
- https://github.com/prisma-labs/graphql-request
- https://github.com/TanStack/query
阅读:
- 《React Query 的工作原理》
- 《本地和远程数据的 React 状态的一切》