1.react 函数式组件与class组件的区别
- 类组件有生命周期,函数组件没有
- 类组件需要继承 Class,函数组件不需要
- 类组件可以获取实例化的
this,并且基于this做各种操作,函数组件不行 - 类组件内部可以定义并维护
state, 函数组件为无状态组件(可以通过hooks实现) - 函数组件相比较类组件,优点是
更轻量与灵活,便于逻辑的拆分复用。 - 函数式组件捕获了渲染时所使用的值,这是两类组件最大的不同。()
2.react为什么要用hooks
如果我们想要让函数组件更有用,就需要函数组件加上状态。
简单想一下,函数和对象不同,并没有一个实例的对象能够在多次执行之间保存状态,那势必需要一个函数之外的空间来保存这个状态,而且要能够检测其变化,从而能够触发函数组件的重新渲染。
再进一步想,那我们需要这样一个机制,能够把一个外部的数据绑定到函数的执行。当数据变化时,函数能够自动重新执行。这样的话,任何会影响 UI 展现的外部数据,都可以通过这个机制绑定到 React 的函数组件。
在 React 中,这个机制就是 Hooks。
顾名思义,Hook 就是“钩子”的意思。在 React 中,Hooks 就是把某个目标结果钩到某个可能会变化的数据源或者事件源上,那么当被钩到的数据或事件发生变化时,产生这个目标结果的代码会重新执行,产生更新后的结果。
当然,既然我们的初衷是为了实现 UI 组件的渲染,那么在 React 中,其实所有的 Hooks 的最终结果都是导致 UI 的变化。比起 Class 组件,函数组件是更适合去表达 React 组件的执行的,因为它更符合 State => View 这样的一个逻辑关系。但是因为缺少状态、生命周期等机制,让它一直功能受限。而有了 Hooks,函数组件的力量就能真正发挥出来了。
3.react useMemo的应用场景
- useMemo是用来缓存计算属性的,它会在发现依赖未发生改变的情况下返回旧的计算属性值的地址。
- useMemo绝不是用的越多越好,缓存这项技术本身也需要成本。
- useMemo的使用场景之一是:只需要给拥有巨大计算量的计算属性缓存即可。
- useMemo的另一个使用场景是:当有计算属性被传入子组件,并且子组件使用了react.memo进行了缓存的时候,为了避免子组件不必要的渲染时使用
4.redux 的底层运行机制是怎么样的
首先,react 组件从 store 中获取原始的数据,然后渲染。当 react 中的数据发生改变时,react 就需要使用 action,让 action 携带新的数据值派发给 store,store 把 action 发给 reducer 函数,reducer 函数处理新的数据然后返回给 store,最后 react 组件拿到更新后的数据渲染页面,达到页面更新的目的。
需要注意的是,在使用 Redux 时,最好不要监视最外层的容器,这样会把整个页面重新渲染,这是很浪费的,你应该绑定到像 App 这样的容器组件中。然后在容器组件中通过 props 向展示组件传递数据。
5.跨域请求中 如何传递cookie
- 前端请求时在
request对象中配置"withCredentials": true; - 服务端在
response的header中配置"Access-Control-Allow-Origin", - 服务端在
response的header中配置"Access-Control-Allow-Credentials", "true"
6.如何监控react组件是否有重复渲染
useMemo正用于解决这样的问题:
把“创建”函数和依赖项数组作为参数传入
useMemo,它仅会在某个依赖项改变时才重新计算 memoized 值。这种优化有助于避免在每次渲染时都进行高开销的计算。React useMemo文档
useMemo的用法和useEffect的用法类似,它需要接收两个参数。
-
第一个参数要求为一个function,function需要return一个变量
-
第二个参数为一个数组,和useEffect类似,作为第一个参数的依赖项数组