从理解 React 框架开始,开启金三银四面试之旅。

1,398 阅读8分钟

朋友们,火热的金三银四来了!

是时候跳槽换工作了!涌抱更高的薪水!

互联网聚集地已被攻陷,拉勾、Boss、猎聘和58同城同台竞技,能贴的广告已经贴满了。西二旗和望京又热闹起来了!

选好了心仪岗位,就要仔细地考虑下如何应对每一场面试了。毕竟,这可是决定你能拿多少钱的重要环节。

对于一个前端打工狗来说,React 作为主要技术栈之一,那可是必考点!

今天的内容就是关于 React 面试的。我相信你在面试中,也会被问到各种各样的问题。我举几个例子你看看,请在自己心里想一想,你会怎么回答?

为什么 React 选择使用 JSX ?

JSX 映射虚拟 Dom 的原理。

setState 到底是同步的,还是异步的?

如何面向组件跨层级通信?

Redux 和 Vuex 的设计思想有什么不同和相同之处?

React 事件与 DOM 事件有什么区别?

为什么 React 要加入 Hook ?

说一下你对 diff 算法的理解。

谈一谈 React 的数据流管理。

上面这些问题,非常地常见。除此之外,类似的问题还有很多,一个一个的讲,根本讲不完,也不可能每个都讲到。当然网上有很多面试宝典,各种典型面试题都会涉及到。

大家可能最近都在准备面试,迫切想要知道这些问题的答案。这也是大家最容易陷入的一个职场误区:对自己的现状不满,想要跳槽涨薪,又缺乏日常积累。面试前疯狂的刷一些面试题应付当前的几场面试,1-2年后,又一次轮回,忽略日常的积累和总结,总想着临阵才磨枪,倒是会有些闪亮,但永远不会锋利。

解这些题并不是今天的重点,我想给你的是一套方法论,是解决这一类问题的通用方法和万能钥匙。

总体来说分为三个部分:

1、对 React 框架的全面了解。

这需要你在日常的开发中,不断积累总结,有意识地主动探索和思考。今天我就分享一下我自己的总计和思考,没有绝对的正确,但我相信一定对你有所启发。

2、面试问题解答的思路和技巧。

我对 React 的使用有很多经验了,写过几个项目,也有了自己的思考和理解。但是,在面试的时候,是不是有这样的情况呢?知道这个知识点,但不能准确完整地表达、不知道该如何描述,但当面试官提起的时候,又能记忆起来,说,“对对对,就是那个,我刚确实不知道该怎么讲”。肚子里有东西,却在嘴上吃了大亏?

3、经典面试题案例解答

前面介绍了这些思路和技巧,那么如何应用到具体的问题解答上呢?我们使用几个比较典型的面试题案例来解答。

我将会从 React 框架开始,慢慢讲述这套内容。

如何理解 React 框架?

先从前端框架的发展来看,之前是没有前端框架这样的工具的,但是前端的业务量越来越大,页面变得越来越复杂,前端的工程也开始庞大了起来。如何组织代码结构,如何有效提升复用率,开始成为大型前端项目迫切需要解决的问题。2009年,带有大量的 Java 开发思想的 AngularJS 问世。

AngularJS 提供了一揽子全家桶解决方案,从底层开始深度封装,向上提供了路由、双向绑定、指令、组件等框架特性。现在也一样,你需要的,它全部都有,但是学习成本太高了,各种全新概念应接不暇,让我们一度怀疑我写的不是前端代码,而是 AngularJS 代码。

而 React 的思维模式是完全不同的,概念也极为简单:“一切皆组件”,而 组件 == Function / Class ;

官方手册的第一句话就是 “ 用于构建用户界面的 JavaScript 库 ” 。

从各自的 “一句话” 介绍中,我们也可以看到,React 把自己定义为 “ JavaScript 库 ”,而 AngularJS 才是 “框架”。虽然我们经常说 “React 框架”,但是人家从来都说自己是个 的。框架这个名字,是我们强加给人家的。不要觉得这仅仅是一个称呼而已,其实从一定程度上,确实误导了很多人,尤其是新手,甚至有过几年工作经验的老油条,也在误会着 React。

**其实在 React 中,只有组件,没有页面,没有控****制器,也没用模型。**在 AngularJS 框架中这些习以为常的概念,React 统统没有。没有页面?那就用组件组合生成一个页面。没有控制器,那就用组件充当控制器。就像搭建乐高玩具一样,组件就是组成整个应用唯一零部件。

但是从实际编码上来讲,可以是纯函数组件或者类组件,也可能在函数中产生影响 UI 生成的副作用,比如直接操作 DOM 或者绑定事件等。在 React 中我们只需要关心两件事:数据与组件

React 负责组件开发者负责数据,这也就是我所理解的 MVVM 框架的概念。程序员负责 MV 的处理,React 负责 VM 的构建。那么对于 React 本身来说就只负责构建视图的工作了,因此在适用场景上远比传统框架更为广泛:

  • 使用 React-dom 开发 PC 网页或者移动端网页

  • 使用 React-Native,开发 iOS 与 Android 应用

  • 使用 React-360 开发 VR 应用

  • 使用 React-ink 开发命令行应用

当然 React 也有缺点。由于 React 并不是一个典型的框架,比如路由、状态管理这样的功能,React 团队更希望交给社区来解决。所以导致在技术选型与学习使用上有比较高的成本。

但也正因为社区蓬勃发展,非官方的一揽子解决方案还是有的,比如 Redux、 React Router 、组件库 Antd 、长列表 React-window 等填补了生态位的缺失。而日常开发应用,这些总要去学习使用。而更多的人,将这些社区的方案当作了 React 的一部分,因此就觉得 React 是个 “框架” 了。这样的说法虽然不准确,但其实也没必要必须纠正,因为 “React+社区方案” 的组合,确实是一个框架应该有的样子。也正为如此,React 成了一个使用者上限与下限差距极大的框架, 而社区方案的组合和应用能力,也成为了进大厂的必考内容。

虽然我这里在一定程度上拿 AngularJS 和 React 再做对比,但是请注意,如果你觉得 AngularJS 无懈可击宇宙无敌吊炸天,那一定是你说得对,而如果你觉得 Vue 无懈可击宇宙无敌吊炸天,那当然也是你说得对。

对于各种框架的对比调查也有很多,正巧,前一段时间 stateofjs2020 刚刚发布,大家感兴趣可以去看看一下。

报告显示,React 的占用量明显高于 Vue 和 AngularJS , 80%的调查者使用英语语种。说白了,就是欧美方面的调查,并不能说明国内的情况。而 react 在 Github 的 star 是 164K,Vue2.x 在 Github 的star 是 180K,大家也可以自己去看看。如果有时间,还可以去看看 NPM 的下载数。

其实,我想说的是,不要做哪个框架更好的对比。Vue 和 React 或者AngularJS 或者其他 MVVM 框架,都是非常优秀且值得学习的,也都有各自的优点和缺点;与其在网络上撕逼,不如认真学习学习,奉劝各位,井蛙不可语海,夏虫不可语冰。

总结一下:

React 本质上就是一个构建用户界面的 JavaScript 库,通过组件化的方式解决视图层开发复用的问题。

组件化的优势在于视图的拆分与模块复用,可以更容易做到高内聚低耦合,通用性更强,一次学习,随处编写。比如 React Native,React 360 等, 这里主要靠虚拟 DOM 来保证实现。

这使得 React 的适用范围变得足够广,但作为一个视图层的框架,React 的劣势也十分明显。它并没有提供传统框架的一整套完整解决方案,在开发大型前端应用时,需要向社区寻找并整合解决方案。虽然一定程度上促进了社区的繁荣,但也为开发者在技术选型和学习适用上造成了一定的成本。

接下来的面试心法,未完待续,敬请期待(ง •_•)ง