成都创新互联网站制作重庆分公司

React必知必会的35个面试题

问题1:什么是虚拟DOM?
主题: React
难度: ⭐

虚拟 DOM (VDOM)是真实 DOM 在内存中的表示。UI 的表示形式保存在内存中,并与实际的 DOM 同步。这是一个发生在渲染函数被调用和元素在屏幕上显示之间的步骤,整个过程被称为调和。

宁洱网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联
问题2:类组件和函数组件之间的区别是啥?
主题: React
难度: ⭐⭐
类组件可以使用其他特性,如状态state和生命周期钩子。当组件只是接收props渲染到页面时,就是无状态组件,就属于函数组件,也被称为哑组件或展示组件。

函数组件和类组件当然是有区别的,而且函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可。为了提高性能,尽量使用函数组件。

区别函数组件类组件是否有this没有有是否有生命周期没有有是否有状态state没有有问题 3:React 中 refs 干嘛用的?
主题: React
难度: ⭐⭐

Refs提供了一种访问在render方法中创建的 DOM 节点或者 React 元素的方法。在典型的数据流中,props是父子组件交互的唯一方式,想要修改子组件,需要使用新的pros重新渲染它。凡事有例外,某些情况下咱们需要在典型数据流外,强制修改子代,这个时候可以使用Refs

咱们可以在组件添加一个ref属性来使用,该属性的值是一个回调函数,接收作为其第一个参数的底层 DOM 元素或组件的挂载实例。

class UnControlledForm extends Component {
  handleSubmit = () => {
    console.log("Input Value: ", this.input.value)
  }
  render () {
    return (
      
this.input = input} />
) } }

请注意,input元素有一个ref属性,它的值是一个函数。该函数接收输入的实际 DOM 元素,然后将其放在实例上,这样就可以在handleSubmit函数内部访问它。

经常被误解的只有在类组件中才能使用refs,但是refs也可以通过利用 JS 中的闭包与函数组件一起使用。

function CustomForm ({handleSubmit}) {
  let inputElement
  return (
    
handleSubmit(inputElement.value)}> inputElement = input} />
) }
问题 4:在 React 中如何处理事件
主题: React
难度: ⭐⭐

为了解决跨浏览器的兼容性问题,SyntheticEvent实例将被传递给你的事件处理函数,SyntheticEvent是 React 跨浏览器的浏览器原生事件包装器,它还拥有和浏览器原生事件相同的接口,包括stopPropagation()preventDefault()

比较有趣的是,React 实际上并不将事件附加到子节点本身。React 使用单个事件侦听器侦听顶层的所有事件。这对性能有好处,也意味着 React 在更新 DOM 时不需要跟踪事件监听器。

问题 5:state 和 props 区别是啥?
主题: React
难度: ⭐⭐

propsstate是普通的 JS 对象。虽然它们都包含影响渲染输出的信息,但是它们在组件方面的功能是不同的。即

state是组件自己管理数据,控制自己的状态,可变;props是外部传入的数据参数,不可变;没有state的叫做无状态组件,有state的叫做有状态组件;多用props,少用state,也就是多写无状态组件。问题 6:如何创建 refs
主题: React
难度: ⭐⭐

Refs 是使用React.createRef()创建的,并通过ref属性附加到 React 元素。在构造组件时,通常将Refs分配给实例属性,以便可以在整个组件中引用它们。

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
  render() {
    return 

; } }

或者这样用:

class UserForm extends Component {
  handleSubmit = () => {
    console.log("Input Value is: ", this.input.value)
  }
  render () {
    return (
      
this.input = input} /> // Access DOM input in handle submit
) } }
问题 7:什么是高阶组件?
主题: React
难度: ⭐⭐

高阶组件(HOC)是接受一个组件并返回一个新组件的函数。基本上,这是一个模式,是从 React 的组合特性中衍生出来的,称其为纯组件,因为它们可以接受任何动态提供的子组件,但不会修改或复制输入组件中的任何行为。

const EnhancedComponent = higherOrderComponent(WrappedComponent);

HOC 可以用于以下许多用例

代码重用、逻辑和引导抽象渲染劫持state 抽象和操作props 处理问题 8:在构造函数调用super并将props作为参数传入的作用是啥?
主题: React
难度: ⭐⭐

在调用super()方法之前,子类构造函数无法使用this引用,ES6 子类也是如此。将props参数传递给super()调用的主要原因是在子构造函数中能够通过this.props来获取传入的props

传递 props

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    console.log(this.props);  // { name: 'sudheer',age: 30 }
  }
}

没传递 props

class MyComponent extends React.Component {
  constructor(props) {
    super();
    console.log(this.props); // undefined
    // 但是 Props 参数仍然可用
    console.log(props); // Prints { name: 'sudheer',age: 30 }
  }

  render() {
    // 构造函数外部不受影响
    console.log(this.props) // { name: 'sudheer',age: 30 }
  }
}

上面示例揭示了一点。props的行为只有在构造函数中是不同的,在构造函数之外也是一样的。

问题 9:什么是控制组件?
主题: React
难度: ⭐⭐⭐

在 HTML 中,表单元素如