前端高频面试题---React篇(二)

98 阅读5分钟

1. React的工作原理?

React是一个用于构建用户界面的JavaScript库,它的工作原理基于虚拟DOM(Virtual DOM)和组件化开发。

  1. 虚拟DOM:React引入了虚拟DOM的机制,它是在浏览器端用Javascript实现的一套DOM API。基于React进行开发时,所有的DOM构造都是通过虚拟DOM进行。每当数据变化时,React都会重新构建整个DOM树,然后React将当前整个DOM树和上一次的DOM树进行对比,得到DOM结构的区别,然后仅仅将需要变化的部分进行实际的浏览器DOM更新。
  2. 组件化:组件是封装起来的具有独立功能的UI部件。React推荐以组件的方式去重新思考UI构成,将UI上每一个功能相对独立的模块定义成组件,然后将小的组件通过组合或者嵌套的方式构成大的组件,最终完成整体UI的构建。

React的工作原理使得开发者不再需要关注某个数据的变化如何更新到一个或多个具体的DOM元素,而只需要关心在任意一个数据状态下,整个界面是如何Render的。这大大降低了逻辑复杂性,意味着开发难度降低,可能产生Bug的机会也更少。

2. react类组件(Class component)和 函数式组件(Functional component)之间有何不同?

React的类组件和函数式组件之间存在以下不同:

  1. 设计思想:函数式组件遵循函数式编程思想,而类组件遵循面向对象编程思想。
  2. 生命周期和状态变量:类组件使用state对象定义状态变量,并具有诸如componentDidMount和shouldComponentUpdate等生命周期钩子函数。而函数式组件没有this,使用一系列内置hooks实现对应的功能,例如使用useState创建状态变量,使用useEffect实现类似于componentDidMount和shouldComponentUpdate等生命周期钩子函数的功能。
  3. 复用性:类组件使用高阶组件(hoc)和render props实现组件的逻辑复用,拓展组件的功能。而函数式组件使用自定义hooks实现组件的逻辑复用。

总体而言,类组件和函数式组件在语法、设计思想、生命周期和状态变量、复用性等方面存在差异。函数式组件更加简洁、易于测试和复用,而类组件在处理复杂逻辑时更加直观。在实际开发中,可以根据需求选择适合的组件类型。

3. react中状态(state)和 属性(props)之间有何不同?

在React中,状态(state)和属性(props)是两个重要的概念,它们在以下方面存在差异:

  1. 定义和使用方式:属性(props)是传递给组件的参数,类似于函数的形参,可以在组件内部使用,但是不能修改。状态(state)是在组件内部由组件自己管理的数据,可以在组件内部通过修改状态值来更新组件。
  2. 数据来源:属性(props)是从父组件传递到子组件的值,是由父组件决定并传递的。状态(state)是由组件自己管理的数据,可以在组件内部通过修改状态值来更新组件。
  3. 生命周期:属性(props)是不可变的,当父组件传递一个属性给子组件时,这个属性的值是不能被修改的。状态(state)是可变的,可以通过修改状态值来更新组件。
  4. 触发更新机制:当属性(props)发生变化时,React会重新渲染该组件。当状态(state)发生变化时,React也会重新渲染该组件。

总之,属性(props)和状态(state)都是React中重要的概念,它们在定义和使用方式、数据来源、生命周期和触发更新机制等方面存在差异。属性(props)是从父组件传递到子组件的值,不可修改;状态(state)是由组件自己管理的数据,可修改。

4. 在React中,refs的作用是什么?

在React中,refs是一个特殊的属性,用于引用组件或DOM元素。它允许我们访问组件实例或DOM节点,从而可以调用特定的方法和属性。

Refs的主要作用包括:

  1. 获取DOM元素的引用:通过refs,我们可以直接获取到DOM元素的引用,从而可以控制焦点、触发动画或者调用DOM API等。
  2. 调用子组件方法:通过refs,我们还可以直接调用子组件的方法,进行一些特定的操作。
  3. 获取组件实例:在类组件中,refs还可以获取到组件实例,从而让我们可以访问组件的属性和方法。

总的来说,refs是React中一个非常重要的工具,它让我们可以直接与DOM元素和组件进行交互,从而实现更复杂的功能。

5. react中的高阶组件(higher order component)? 什么场景下使用?

React中的高阶组件(Higher Order Component,简称HOC)是一个用于复用组件逻辑的高级技术。它本身不是React中的组件,而是一个函数,这个函数接受一个React组件作为参数,并返回一个新的组件。

高阶组件的使用场景包括:

  1. 需要代码重用时:如果多个组件都用到了同一段逻辑,可以将共同的逻辑部分提取出来,利用高阶组件的形式将这段逻辑整合到每一个组件中,从而减少代码的逻辑重复。
  2. 需要组件增强优化时:对于第三方组件,如果需要添加满足实际开发需求的功能,又不想修改原始组件,可以使用高阶组件在不修改原始组件的前提下,对组件添加所需的功能。

总的来说,高阶组件可以用于任何需要复用或优化React组件逻辑的场景。