前端面试 P071:UI 是状态映射与渲染纯度
Showing the original in Chinese (China)
来源:方格前端讲面试 · 1.如何理解 UI = f(state) 这个公式?,13 分 13 秒。
回看定位:00:55 公式 · 03:44 渲染纯度 · 09:48 流程
UI = f(state) 表达什么
给定当前输入,组件描述希望显示的界面,React 负责协调与提交。实际输入还包括 props、context 等,公式是帮助理解的简写,不是说组件只能访问一个名叫 state 的对象。
function Status({ user }) {
return <p className={user.online ? 'online' : 'offline'}>{user.name}</p>;
}
事件改变状态来源,之后的渲染依据新输入重新计算。组件返回的是 React 可渲染描述,不一定是真实 DOM 节点,也不只限单一对象,还可包含文本、数组、null 等。
纯度约束主要作用在渲染
渲染中不要修改收到的 props、外部状态或执行请求等不可控副作用。同样输入下应得到一致描述,便于重复、重启或丢弃计算。事件处理和 Effect 可以与外界交互,但要遵守各自的生命周期与清理规则。
纠正性能的绝对说法
视频把简单计数器的“复杂度恒定、无论更新多少次性能都高”扩展成优势,这不能代表一般组件。渲染函数的计算、子树规模、布局、提交成本都需要具体分析。
UI 状态映射也不会从根本上消灭所有界面 bug:命令式集成、异步竞态、样式、浏览器资源与外部数据都可能影响结果。它提供的是更清楚的推理结构。