• 前端react面试题指北


    在调用setState 之后发生了什么

    • 状态合并,触发调和:

      setState函数之后,会将传入的参数对象与当前的状态合并,然后出发调用过程

    • 根据新的状态构建虚拟dom

      经过调和过程,react会高效的根据新的状态构建虚拟DOM树,准备渲染整个UI页面

    • 计算新老树节点差异,最小化渲染

      得倒新的虚拟DOM树后,会计算出新老树的节点差异,会根据差异对界面进行最小化渲染

    • 按需更新

      在差异话计算中,react可以相对准确的知道哪些位置发生了改变以及该如何改变,这保证按需更新,而不是宣布重新渲染

    展示组件(Presentational component)和容器组件(Container component)之间有何不同

    展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是数据的状态。

    容器组件则更关心组件是如何运作的。容器组件会为展示组件或者其它容器组件提供数据和行为(behavior),它们会调用 Flux actions,并将其作为回调提供给展示组件。容器组件经常是有状态的,因为它们是(其它组件的)数据源。

    可以使用TypeScript写React应用吗?怎么操作?

    (1)如果还未创建 Create React App 项目

    • 直接创建一个具有 typescript 的 Create React App 项目:
     npx create-react-app demo --typescript
    
    
    • 1
    • 2

    (2)如果已经创建了 Create React App 项目,需要将 typescript 引入到已有项目中

    • 通过命令将 typescript 引入项目:
    npm install --save typescript @types/node @types/react @types/react-dom @types/jest
    
    
    • 1
    • 2
    • 将项目中任何 后缀名为 ‘.js’ 的 JavaScript 文件重命名为 TypeScript 文件即后缀名为 ‘.tsx’(例如 src/index.js 重命名为 src/index.tsx )

    HOC相比 mixins 有什么优点?

    HOC 和 Vue 中的 mixins 作用是一致的,并且在早期 React 也是使用 mixins 的方式。但是在使用 class 的方式创建组件以后,mixins 的方式就不能使用了,并且其实 mixins 也是存在一些问题的,比如:

    • 隐含了一些依赖,比如我在组件中写了某个 state 并且在 mixin 中使用了,就这存在了一个依赖关系。万一下次别人要移除它,就得去 mixin 中查找依赖
    • 多个 mixin 中可能存在相同命名的函数,同时代码组件中也不能出现相同命名的函数,否则就是重写了,其实我一直觉得命名真的是一件麻烦事。。
    • 雪球效应,虽然我一个组件还是使用着同一个 mixin,但是一个 mixin 会被多个组件使用,可能会存在需求使得 mixin 修改原本的函数或者新增更多的函数,这样可能就会产生一个维护成本

    HOC 解决了这些问题,并且它们达成的效果也是一致的,同时也更加的政治正确(毕竟更加函数式了)。

    react 的优化

    shouldcomponentUpdate pureCompoment setState

    • CPU的瓶颈(当有大量渲染任务的时候,js线程和渲染线程互斥)
    • IO的瓶颈 就是网络(如何在网络延迟客观存在的 情况下,减少用户对网络延 迟的感知)(Code Splitting • Data Fetching)比如react.lazy(组件懒加载) suspense(分包在网络上,用的时候在获取)
    • Virtual DOM 快么(Virtual DOM的优势不在于单次的操作,而是在大量、频繁的数据更新下,能够对视图 进行合理、高效的更新。)

    展示组件(Presentational component)和容器组件(Container component)之间有何不同?

    React.Component 和 React.PureComponent 的区别

    PureComponent表示一个纯组件,可以用来优化React程序,减少render函数执行的次数,从而提高组件的性能。

    在React中,当prop或者state发生变化时,可以通过在shouldComponentUpdate生命周期函数中执行return false来阻止页面的更新,从而减少不必要的render执行。React.PureComponent会自动执行 shouldComponentUpdate。

    不过,pureComponent中的 shouldComponentUpdate() 进行的是浅比较,也就是说如果是引用数据类型的数据,只会比较不是同一个地址,而不会比较这个地址里面的数据是否一致。浅比较会忽略属性和或状态突变情况,其实也就是数据引用指针没有变化,而数据发生改变的时候render是不会执行的。如果需要重新渲染那么就需要重新开辟空间引用数据。PureComponent一般会用在一些纯展示组件上。

    使用pureComponent的好处:当组件更新时,如果组件的props或者state都没有改变,render函数就不会触发。省去虚拟DOM的生成和对比过程,达到提升性能的目的。这是因为react自动做了一层浅比较。

    参考 前端进阶面试题详细解答

    区分状态和 props

    条件 State Props
    1. 从父组件中接收初始值 Yes Yes
    2. 父组件可以改变值 No Yes
    3. 在组件中设置默认值 Yes Yes
    4. 在组件的内部变化 Yes No
    5. 设置子组件的初始值 Yes Yes
    6. 在子组件的内部更改 No Yes

    React 的工作原理

    React 会创建一个虚拟 DOM(virtual DOM)。当一个组件中的状态改变时,React 首先会通过 “diffing” 算法来标记虚拟 DOM 中的改变,第二步是调节(reconciliation),会用 diff 的结果来更新 DOM。

    什么是 Props

    Props 是 React 中属性的简写。它们是只读组件,必须保持纯,即不可变。它们总是在整个应用中从父组件

  • 相关阅读:
    JavaScript简介、变量及常量
    [汇编语言][bx]和loop指令
    Java之“数字困境”:资产管理项目中的Bug追踪与启示
    bean的生命周期
    前端学习笔记13——JSON数据的概念和分类
    学习Kotlin编程语言
    DirectX11 With Windows SDK--39 阴影技术(VSM、ESM)
    进程调度算法-先来先服务、最短作业优先调度算法和高响应比优先调度算法
    知乎问题:如何说服技术老大用 Redis ?
    Windows 的Powershell取得管理员权限
  • 原文地址:https://blog.csdn.net/beifeng11996/article/details/128214053