interview
react-basics
React.createClass 和 extends Component 有哪些区别

React 基础面试题, React.createClass 和 extends Component 有哪些区别?

React 基础面试题, React.createClass 和 extends Component 有哪些区别?

QA

Step 1

Q:: React.createClass 和 extends Component 有哪些区别?

A:: React.createClass 是 React 早期用来创建组件的一种方法,它允许你使用一种类式语法来创建组件。这个方法已经在 React 15.5 版本后被弃用。相比之下,extends Component 是基于 ES6 class 的语法,它是目前创建 React 组件的推荐方式。使用 extends Component 创建的组件有更好的性能,并且支持更灵活的 JavaScript 特性,如类继承、箭头函数、模块化等。

Step 2

Q:: 为什么 React.createClass 被弃用?

A:: React.createClass 存在一些缺陷,如自动绑定(this)会导致性能问题,并且无法很好地与 ES6 和未来的 JavaScript 特性兼容。使用 ES6 class 创建组件更加直观、性能更好,并且可以利用现代 JavaScript 的功能如继承和更灵活的构造函数。

Step 3

Q:: 在什么情况下使用 extends Component 而不是函数式组件?

A:: extends Component 主要用于需要使用生命周期方法或者需要管理内部状态的组件。而函数式组件则更适合无状态、无生命周期方法的简单展示型组件。随着 React Hooks 的引入,现在函数式组件也能处理状态和副作用,所以在很多情况下,两者都可以使用,但复杂逻辑通常还是放在类组件中。

Step 4

Q:: React 组件生命周期中的各个方法在什么时候触发?

A:: 组件生命周期方法主要分为三个阶段:挂载(Mounting)、更新(Updating)和卸载(Unmounting)。在挂载阶段,constructor, static getDerivedStateFromProps, render, componentDidMount 依次执行。在更新阶段,static getDerivedStateFromProps, shouldComponentUpdate, render, getSnapshotBeforeUpdate, componentDidUpdate 依次执行。在卸载阶段,componentWillUnmount 执行。

用途

面试这个内容的原因是考察候选人对 React 基础知识的掌握情况,特别是对组件创建方式和生命周期的理解。在实际生产环境中,开发者需要根据具体需求选择适当的组件创建方式,理解不同组件的生命周期有助于优化组件的性能,管理复杂状态,处理异步请求,或在组件即将销毁时清理资源。\n

相关问题

🦆
什么是 React 中的高阶组件Higher-Order Component?

高阶组件(HOC)是一个函数,接受一个组件作为参数并返回一个新的组件。HOC 通常用于代码复用、逻辑抽象、渲染劫持等场景。常见的 HOC 示例有 Redux 的 connect() 和 React Router 的 withRouter()

🦆
React 中的 PureComponent 和 Component 有什么区别?

React.PureComponent 是 React.Component 的一种优化形式,它会在 shouldComponentUpdate 方法中进行浅比较。如果组件的 props 和 state 没有变化,PureComponent 会阻止组件重新渲染。使用 PureComponent 可以提高性能,但在对象或数组的深层变化时需要注意。

🦆
如何在 React 中管理组件状态?

在 React 中管理组件状态可以通过类组件的 state 属性或函数组件的 useState Hook 来完成。对于更复杂的状态管理,可以使用 useReducer Hook,或者借助 Redux、MobX 等外部状态管理库。

🦆
什么是 React Hooks?举例说明如何使用 useEffect 和 useState.

React Hooks 是 React 16.8 引入的一项特性,允许在函数组件中使用状态和其他 React 特性。useState 是一个 Hook,用于在函数组件中声明状态变量。useEffect 是另一个 Hook,用于在函数组件中执行副作用,比如数据获取、订阅、手动 DOM 操作等。