React 的哲学是:React 是用 JavaScript 构建快速响应的大型 Web 应用程序的首选方式。

初次接触 React 的同学会发现,开发 React 的思维模式是完全不同的,概念也极为简单。如果用一个非常简洁的公式来表达,那就是:

View = fn(props)

这个公式表达了给定相同的输入状态,函数总是会生成一致的组件。只有做到输入与输出恒定,那么它才是可测的。

声明式

声明式编程的优势在于直观,可以做到一目了然,也便于组合

组件式

组件化可以降低系统间功能的耦合性,提高功能内部的聚合性。对前端工程化及代码复用有极大的好处。React 组件化最大的区别在于没有使用模板进行编写,而是采用了声明式的 JSX。

虚拟 DOM

1. 用 JavaScript 对象模拟 DOM 树,得到一棵虚拟 DOM 树。
2. 当页面数据变更时,生成新的虚拟 DOM 树,比较新旧两棵虚拟 DOM 树的差异。
3. 把差异应用到真正的 DOM 树上

虽然虚拟 DOM 解决了页面被频繁更新和渲染带来的性能问题,但传统虚拟 DOM 依然有以下性能瓶颈:

  • 在单个组件内部依然需要遍历该组件的整个虚拟 DOM 树;
  • 在一些组件整个模版内只有少量动态节点的情况下,这些遍历都是性能的浪费;
  • 递归遍历和更新逻辑容易导致 UI 渲染被阻塞,用户体验下降。

对此,React 框架也有进行相应的优化:使用任务调度来控制状态更新的计算和渲染

缺点

它并没有提供完整的一揽子解决方案,在开发大型前端应用时,需要向社区寻找并整合解决方案。虽然一定程度上促进了社区的繁荣,但也为开发者在技术选型和学习适用上造成了一定的成本。

为什么用 JSX

React 为什么使用 JSX?

  • JSX 。 JSX 并不会引入太多新的概念,它仍然是 JavaScript,就连条件表达式和循环都仍然是 JavaScript 的方式。
  • 模板语法、因为模板会有很多新概念,比如:v-if, v-show….
  • 模板字符串。代码结构变得更复杂了,而且开发工具的代码提示也会变得很困难。
  • Json。代码提示困难

类组件函数组件
类组件和函数组件的区别

组件分类

  • 把只作展示、独立运行、不额外增加功能的组件,称为哑组件,或无状态组件,还有一种叫法是** 展示组件 **;
  • 把处理业务逻辑与数据状态的组件称为有状态组件,或灵巧组件,灵巧组件一定包含至少一个灵巧组件或者展示组件。

组件通信

分成两种,一层或者多层的情况

  • 一层
    • 父与子的情况下,因为 React 的设计实际上就是传递 Props 即可。
    • 子与父的情况下,有两种方式,分别是回调函数与实例函数
  • 多层级间的数据通信
    • 使用 React 的 Context API,最常见的用途是做语言包国际化。
    • 使用全局变量与事件。全局变量通过在 Windows 上挂载新对象的方式实现,这种方式一般用于临时存储值,这种值用于计算或者上报,缺点是渲染显示时容易引发错误。
    • 使用状态管理框架,比如 FluxReduxMobx。优点是由于引入了状态管理,使得项目的开发模式与代码结构得以约束,缺点是学习成本相对较高。

React 更新策略
React 18
Redux
React发展
React 更新策略
React Hooks
《 前端面试宝典之 React 篇 》
深入浅出搞定React

react问题