我们知道前端开发最常用的响应式框架除了vue就是react,它是由facebook开发的,非常多大厂都是用的react。react不仅可以用于前端应用开发,还可以用于移动原生应用开发和桌面应用开发。
React设计思路
传统的编程语言比如C,是转换式系统,指令式编程,编译器根据输入进行数值计算并输出。而前端需要的是响应式系统,也就是监控系统对事件进行监听,并做什么操作并实时更新UI界面。
传统的UI编程UI不会自动更新,需要频繁手动调用DOM进行更新,且依赖关系复杂,代码没有隔离和封装。
react要做的是解决传统UI编程的问题,使状态发生改变的时候UI自动更新,并且代码组件化可复用可封装,只需声明就可解决状态之间的相互依赖关系。
像如果要实现下面这个手机配置选择界面,型号和颜色的选择都会影响显示在右上角的价格,如果用js去写是非常麻烦的,但是如果使用react的组件化思想,就变得简单起来了。
如果说前端网页是一个城堡,那么组件就是积木,把木块雕刻成需要的样子,在垒城堡的时候直接拿来用就可以了。
组件有以下几个特点:
- 组件既可以是原子组件,也可以是组件的组合
- 组件拥有内部状态,外部不可见
- 父组件可将状态传入组件内部,控制子组件的运行
hooks写法
hook就是钩子,用于监听事件,在react中,hooks基本都是uesState和useEffect的封装,不要在循环、条件、或者嵌套函数中使用hooks
- useState:传入一个初始值,返回一个状态和set该状态的函数,用户可以通过调用该函数来实现状态的修改
- useEffect:传入一个函数和一个数组,数组是状态的数组,称作依赖项,该函数在mount时,和依赖性被set时执行。有副作用的函数要传入useEffect执行,副作用指在计算之外的一些事情,比如网络请求,更新dom,存储数据等
虚拟DOM
真实的dom不是js中的对象,是浏览器内部的状态,我们只能通过dom接口来修改dom。
虚拟dom与真实dom同步的在js内存中维护的一个对象,具有和dom类似的树状结构,并和dom可以建立一一对应的关系
状态管理库
将状态抽离到UI外部进行统一管理,具体代码就不写了,和vuex还是比较像的