面试备战录

52 阅读3分钟

1、React 有哪些核心特性?

答:React是一个用于构建用户界面的JS库,它的核心特性有以下几个方面:

  • 组件化(Component-based)
    • React强调将 UI 拆分为独立、可复用的组件,每个组件拥有自己的状态和生命周期,便于维护和扩展。
  • JSX(JavaScript XML)
    • React使用JSX语法,使开发者能在JavaScript中以声明的方式编写构清晰的UI代码,本质上是React.createElement()语法糖。
  • 虚拟 DOM(Virtual DOM)
    • React使用虚拟DOM来提升性能,状态变更不会立即操作真实DOM,而是先在内存中构建新的虚拟DOM树,然后通过Diff算法找出差异,最后批量更新真实DOM。
  • 单向数据流(Unidirectional Data Flow)
    • 数据通过props自上而下流动,子组件通过回调通知父组件,实现数据的单向管理。这种方式有利于组件间的数据跟踪和状态管理。
  • Hooks(函数组件状态管理)
    • React16.8 引入 Hooks,使函数组件具备状态和副作用管理能力,常见的有useState、useEffect、useMemo等,大大简化了组件逻辑复用和代码结构。
  • 声明式编程(Declarative UI)
    • 开发者只需要描述”界面在某种状态下应该呈现的样子“,React会负责根据状态自动更新视图,使UI与状态保持同步。
  • Context API(全局状态共享)
    • 用于在组件树中共享全局数据(如主题、用户信息),避免多层props传递,是Redux等第三方状态库的轻量替代方案之一。

2、React 和 Vue 的区别?

  • 语法风格不同
    • React 使用 JSX,所有模版写在 JS 中,灵活但不直观
    • Vue 使用 HTML 模板 + 指令(如 v-if, v-for),更接近原生的 HTML,入门更快。
  • 响应式原理不同
    • Vue3 使用 Proxy 自动追踪依赖变化(响应式系统天然具备细粒度更新)。
    • React 中状态更新需显式调用setStateuseState,更新是全量触发 render,再通过虚拟 DOM diff 判断变更。
  • 状态管理
    • Vue 有官方的 Vuex / Pinia
    • React 状态管理依赖第三方:Redux、Zustand、Recoil,但更灵活。
  • Hooks vs Options API
    • React 使用 Hook 编程(useState, useEffect 等),灵活但可能“Hook 地狱”。
    • Vue 2 用 Options API(清晰分区),Vue 3 引入 Composition API(更像 React Hook,但可组合性更强)。
  • 生态和工程化
    • React 更偏向库(library):提供视图层 + hook,其它功能靠你搭建(例如:状态管理、请求库、路由)。
    • Vue 是框架(framework):官方提供全套(Vue Router, Vuex, Vue CLI),上手快,适合中小团队。

3、React 生命周期有哪些?

答:React生命周期方法最初是为类组件(Class Component)设计的。主要分为三大阶段:挂载、更新、卸载。

  • 挂载阶段(Mounting):组件被创建并插入 DOM 时调用
    • constructor():初始化 state 和绑定方法;
    • static getDerivedStateFromProps(props,state):根据props派生state,极少用,不推荐滥用
    • render():必须的函数,返回 JSX
    • componentDidMount():DOM 渲染完毕后调用,适合发请求、设置订阅等副作用操作,之前是这个componentWillMount()已弃用
  • 更新阶段(Updating):组件的 props 或 state 变化时触发
    • static getDerivedStateFromProps():同挂载阶段
    • shouldComponentUpdate(nextProps,nextState):决定是否更新(优化性能),之前是这个componentWillReceiveProps(nextProps)已弃用
    • render():再次调用以更新 DOM
    • getSnapshotBeforeUpdate(prevProps,prevState):记录更新前的信息(如滚动位置),之前是这个componentWillUpdate(nextProps, nextState)已弃用
    • componentDidUpdate(prevProps,prevState,snapshot):组件更新后调用,适合 DOM 操作或再次请求
  • 卸载阶段(Unmounting)
    • componentWillUnmount():清理副作用,如清除定时器、取消订阅等
  • 错误处理(Error Handling):捕获子组件中的错误
    • static getDerivedStateFromError(error):渲染备用 UI
    • componentDidCatch(error, info):用于错误日志收集等