uploadhub的技术博客 uploadhub的技术博客
首页
  • 学习笔记

    • 《HTML5和CSS3篇》
    • 《JavaScript基础篇》
    • 《JavaScript高级篇》
    • 《Ajax篇》
    • 《JavaScript模块化篇》
    • 《Node.js篇》
    • 《MongoDB篇》
    • 《Promise篇》
    • 《Git篇》
  • 《Vue2+Vue3篇》
  • 《React篇》
  • 一面-基础
  • 二三面-进阶
关于我
  • 分类
  • 标签
  • 归档

uploadhub

首页
  • 学习笔记

    • 《HTML5和CSS3篇》
    • 《JavaScript基础篇》
    • 《JavaScript高级篇》
    • 《Ajax篇》
    • 《JavaScript模块化篇》
    • 《Node.js篇》
    • 《MongoDB篇》
    • 《Promise篇》
    • 《Git篇》
  • 《Vue2+Vue3篇》
  • 《React篇》
  • 一面-基础
  • 二三面-进阶
关于我
  • 分类
  • 标签
  • 归档
  • Vue相关

  • React相关

    • 1.React基本使用
    • 2.React原理
    • 3.React面试真题演练
      • 1.组件之间如何通讯
      • 2.JSX本质是什么
      • 3.Context是什么?如何应用
      • 4.shouldComponentUpdate用途
      • 5.redux单项数据流
      • 6.setState场景题
      • 7.什么是纯函数
      • 8.React组件生命周期
      • 9.React发起ajax应该在哪个生命周期
      • 10.渲染列表,为何使用key
      • 11.函数组件和class组件区别
      • 12.什么是受控组件
      • 13.何时使用异步组件
      • 14.redux如何进行异步请求
      • 15.react-router如何配置懒加载
      • 16.PureComponent有何区别
      • 17.React事件和DOM事件的区别
      • 18.React性能优化
      • 19.React和Vue的区别
    • 4.React Hooks
  • Webpack和Babel

  • 项目设计
  • 项目流程
  • 二三面-进阶
  • React相关
uploadhub
2022-05-28
目录

3.React面试真题演练

# 1.组件之间如何通讯

  1. 父子组件props

  2. 自定义事件

  3. Redux和Context

# 2.JSX本质是什么

  1. createElement

  2. 执行返回vnode

# 3.Context是什么?如何应用

  1. 父组件,向其下所有子孙组件传递信息

  2. 对一些简单的公共信息:主题色、语言等

  3. 复杂的公共信息,请用redux

# 4.shouldComponentUpdate用途

  1. 性能优化

  2. 配合“不可变值”一起使用,否则会出错

# 5.redux单项数据流

Redux数据流图

# 6.setState场景题

componentDidMount() {
	//count 初始值为 0
	this.setState({ count: this.state.count + 1 }) 
    console.log('1', this.state.count) // 0
	this.setState({ count: this.state.count + 1 }) 
    console.log('2', this.state.count) // 0
	setTimeout(() => {
		this.setState({ count:this.state.count+1}) 
        console.log('3', this.state.count) // 2
	})
	setTimeout(() => {
		this.setState({ count: this.state.count + 1 }) 
    	console.log('4', this.state.count) // 3
	})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 7.什么是纯函数

  1. 返回一个新值,没有副作用(不会“偷偷”修改其他值)

  2. 重点:不可变值,如arr1 = arr.slice()

# 8.React组件生命周期

  1. 单组件生命周期

  2. 父子组件生命周期

  3. 注意SCU

# 9.React发起ajax应该在哪个生命周期

  1. 同Vue

  2. 应在componentDidMount发起

# 10.渲染列表,为何使用key

  1. 同Vue,必须用key,且不能是index和random

  2. diff算法中通过tag和key来判断,是否是sameNode

  3. 减少渲染次数,提升渲染性能

# 11.函数组件和class组件区别

  1. 函数组件是纯函数,输入props,输出JSX

  2. 函数组件没有实例,没有生命周期,没有state

  3. 函数组件不能扩展其他方法

# 12.什么是受控组件

  1. 表单的值,受state控制

  2. 需要自行监听oChange,更新state

  3. 对比非受控组件

# 13.何时使用异步组件

  1. 同Vue

  2. 加载大组件

  3. 路由懒加载

# 14.redux如何进行异步请求

  1. 使用异步action

  2. 如redux-thunk

# 15.react-router如何配置懒加载

image-20221007224835431

# 16.PureComponent有何区别

  1. 实现了浅比较的shouldComponentUpdate

  2. 优化性能

  3. 但要结合不可变值使用

# 17.React事件和DOM事件的区别

  1. 所有事件都挂载到document上(React 17后React事件绑定到 root 组件上)

  2. event不是原生的,是SyntheticEvent合成事件对象

  3. dispatchEvent

# 18.React性能优化

  1. 渲染列表加key

  2. 自定义事件、DOM事件及时销毁

  3. 合理使用异步组件

  4. 减少函数bind this的次数

  5. 合理使用SCU PureComponent和memo

  6. 合理使用Immutable.js

  7. webpack层面的优化(后面会讲)

  8. 前端通用的性能优化,如图片懒加载

  9. 使用SSR

# 19.React和Vue的区别

  1. 都支持组件化
  2. 都是数据驱动视图
  3. 都使用vdom操作DOM
  4. React使用JSX拥抱JS,Vue使用模板拥抱html
  5. React函数式编程,Vue声明式编程
  6. React更多需要自力更生,Vue把想要的都给你
#面试#React
2.React原理
4.React Hooks

← 2.React原理 4.React Hooks→

最近更新
01
HTTP协议及缓存机制
05-28
02
开发环境
05-28
03
JS基础知识(一)-变量类型和计算
05-28
更多文章>
Theme by Vdoing | Copyright © 2021-2023 uploadhub | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式