2024年前端岗位JD里写"熟悉React"就能过初筛,2025年同一批人挂在二面的比例涨了37%。不是题变难了,是面试官换了一套验货逻辑——他们不再问"用过什么",而是问"为什么这样设计"。
钩子战争:从背诵API到拆解执行时序
「现在遇到候选人背useEffect依赖数组规则,我会直接打断。」一位字节跳动前端架构师在内部分享会上说,「我要听的是为什么闭包陷阱在React 18的并发模式下会被放大,而不是背诵解决方案。」
useState、useEffect、useRef这三件套早就不够看了。2025年高频出现的考点是useEffect与useLayoutEffect的微任务调度差异——前者在绘制后执行,后者在绘制前阻塞。面试官会画一条时间轴让你标注:浏览器一帧16.6ms里,React的提交阶段到底发生在哪个切片。
自定义钩子(Custom Hooks)成了新的分水岭。不是让你封装一个useLocalStorage,而是问:「如果两个组件同时调用你的useWindowSize,resize事件监听器会被注册几次?」这题去年在蚂蚁金服的面试题库出现频率是每10场8次。
React.memo、useMemo、useCallback的混淆使用,是面试官最喜欢的送命题。很多人背熟了"props浅比较""缓存计算值""缓存函数引用"的定义,却说不清在父组件重渲染时,这三者如何形成依赖链的断裂或传递。美团2024年校招题就考过:一个被memo包裹的子组件,为什么接收了useCallback的函数仍然重渲染?
虚拟DOM不是黑箱,是面试官的显微镜
Virtual DOM → Reconciliation → Fiber,这条链路在2025年的面试里被要求逐层拆解。不是背概念,是画图:Fiber节点里return、child、sibling三个指针怎么构成遍历树,时间切片(Time Slicing)如何把一个大任务拆成可中断的单元。
「候选人能说出Fiber架构是为了解决栈递归的性能问题,这算及格。」一位拼多多面试官在知乎匿名回答,「但我要听的是,为什么React 18的并发特性必须依赖Fiber,以及useTransition的优先级插队机制具体怎么实现。」
列表渲染时的key属性成了测谎仪。知道"用index当key会出问题"是基础题,进阶题是:「如果key相同但组件类型不同,React会复用DOM节点还是销毁重建?」这涉及到Reconciliation的diff算法中对element.type的判断逻辑,2024年京东面试考过原题。
受控与非受控:一个文件上传组件的陷阱
Controlled vs Uncontrolled Components的经典区分,在2025年进化成了场景题。面试官会直接甩一段代码:一个文件上传组件,用ref获取input元素,同时在onChange里同步state,问这属于什么模式,以及会带来什么隐患。
答案是"混合模式",隐患是文件对象的引用在多次选择同一文件时不会触发onChange。阿里2024年P6面试题变体:如何在不破坏受控组件原则的前提下,实现点击按钮重置文件选择?这题挂掉的人里,70%试图用key强制重新挂载组件,却忽略了input.value = ''的原生API。
Error Boundaries和Portals的考点也在下沉。不再是"是什么",而是"怎么用"——Error Boundary捕获不到哪些错误(事件处理、异步代码、服务端渲染),Portal的DOM挂载点如何影响事件冒泡。腾讯2025年面试新增题:Modal组件用Portal渲染到body,点击Modal内部如何阻止事件冒泡到被遮罩的父组件?
从Class组件考古看设计思维
Functional vs Class Components的对比题,2025年出现了奇怪的回潮。不是考察语法差异,是问:「如果让你用Class组件实现一个功能,你会选择componentDidUpdate还是getDerivedStateFromProps,为什么?」
这题在考React的设计演进。getDerivedStateFromProps在16.3引入是为了替代componentWillReceiveProps的副作用滥用,但官方文档在2018年就警告"派生状态会导致代码难以维护"。能答出这层历史包袱的候选人,会被标记为"理解React设计哲学"。
生命周期图谱的绘制能力成了隐形门槛。面试官会让你手写:React 16.3前后的生命周期对比,以及17版本移除的几个UNSAFE_方法分别对应什么场景。这不是考古癖,是在验证你是否经历过Class组件的坑——那些没踩过getSnapshotBeforeUpdate解决滚动位置恢复的人,很难讲清楚为什么Fiber架构要抛弃同步的生命周期。
JSX和Babel的编译链路也被纳入考察。不是问"JSX是什么",是问:「@babel/preset-react把JSX转成React.createElement后,React 17的新JSX转换(New JSX Transform)省掉了哪一步,对包体积有什么影响?」这题在字节2024年社招出现,答对的人不到三成。
2025年3月,一位拿到Meta前端offer的候选人在复盘帖里写:「面试官让我用15分钟实现一个useDebounce,然后逐行追问如果依赖项是对象引用会怎样,如果组件卸载时定时器还没触发怎么清理,如果同时有多个防抖请求怎么保证时序。」
这套追问链,正在从Meta、Google蔓延到国内一线厂。React面试的Phase 2,本质上是在筛选能讲清楚"为什么"的人——那些只会在文档里复制粘贴的人,连第一轮时序图都画不完。
你的useEffect清理函数里,有没有漏掉那个在Strict Mode下会被执行两次的订阅?
热门跟贴