这里记录React面试题个人整理,以应用为主。
1. React类组件和函数组件的区别?好处在哪里?为啥要用函数组件
1)类组件可以定义自己的state, 用来保存组件内部状态;
2)类组件有自己的生命周期,在不同的生命周期完成不同的业务逻辑
3)类组件在状态state改变时,可以只重新执行render函数(在state更新时,类组件会重新渲染组件,类组件是靠重新执行render函数来执行的)
1.1 类组件需要用shouldComponentUpdate来判断某个属性是否变化来决定组件是否要重新渲染;函数组件会比较依赖状态来决定是否需要重新渲染组件;
函数式组件的优点:
2. React Hooks相关问题
1. useState的注意问题:
a. 直接修改state,而不是使用回调函数
b.使用Object.assign来对state为对象的值来进行修改
a) useState更新后,立即拿到更新的值怎么做
a) 在useEffect中监听state的值,并在回调函数中获取最新的值
b)将setCount写成回调函数的形式,在回调函数中获取最新的state值
c) 用useRef保存值,每次挂载完之后countRef.current来储存最新的值
b) useRef的使用场景
d) useEffect的依赖项问题
useEffect的依赖项如果是复杂数据类型,只会在内存地址改变的时候才去执行effect里的函数,如果某个值改变可能认为内存地址不变,进而没有执行effect; 举例:对象重新赋值,会改变内存地址,但是改变某个属性值,则不会改变对象的内存地址,这时依赖项会认为对象没有改变,进而不执行effect,这时要用对象的某个属性值来作为依赖项
c) useCallback和useMemo的区别
useCallback是缓存函数,useMemo是缓存值
d)什么时候用memo还是useCallback
1)用memo的原因:
组件在一些情况下会发生re-render, 需要React.memo搭配useCallback使用
re-render的情况有:
1)自身state/props 2)context 3)父组件re-render,所有子组件都会re-render
3. React的更新机制(和Vue的异同)
4. Redux相关问题
5. React的fiber组件
持续更新中。。。