标准答案

  1. 声明式 UI 关注“当前状态下 UI 应该是什么”,开发者主要维护 state、props 和渲染结果之间的关系。
  2. 传统 DOM 操作关注“怎么修改页面”,例如手动 querySelector、修改 class、innerText、style 或绑定事件。
  3. React 会根据组件返回的 JSX 和状态变化重新计算 UI,再通过协调过程把必要变更应用到真实 DOM。
  4. 声明式写法更容易让 UI 和数据保持一致,尤其适合表单、列表、条件渲染和复杂交互状态。
  5. 它不是完全不用 DOM,而是把大多数 DOM 更新细节交给框架管理;需要聚焦、测量尺寸、接入第三方库时仍然可能用 ref 访问 DOM。

题目解析

这道题可以从心智模型回答:传统方式是命令浏览器一步步改节点,React 是让组件根据状态返回 UI 描述。

声明式 UI 的优势在状态复杂时更明显。页面上有 loading、error、empty、selected、editing 等状态时,用状态驱动渲染比散落 DOM 操作更可维护。

React 仍然允许直接操作 DOM,但应该用于少数逃生口场景,而不是绕过 React 去修改由 React 管理的节点。

代码示例

下面的例子展示同一个按钮状态,用 React 时更关注状态和渲染结果。

TSX
function SubmitButton() {
  const [loading, setLoading] = useState(false)

  async function submit() {
    setLoading(true)
    await saveForm()
    setLoading(false)
  }

  return (
    <button disabled={loading} onClick={submit}>
      {loading ? '提交中' : '提交'}
    </button>
  )
}

常见误区

  • 把声明式 UI 理解成“React 不操作 DOM”。React 仍然会更新 DOM,只是开发者通常不直接写 DOM 更新步骤。
  • 在 React 管理的节点上混用大量手写 DOM 修改,导致真实 DOM 和组件状态不一致。
  • 只说“React 有虚拟 DOM”,没有说清楚状态驱动视图这个核心差异。

作者信息