前端面试题:谈一谈vue和react的区别?

2023-11-06

(1)从编程范式的角度讲

  • 在vue-loader、vue-template-compiler的支持下,vue可以采用SFC单文件组织的方式实现组件化;vue有指令,使用指令能够方便地渲染视图,vue表单是双向绑定的;vue组件是基于选项式的编程,常用选项有生命周期、计算属性、侦听器等;vue的组件库十分繁荣,自定义属性、自定义事件、自定义插槽是vue组件化的三大基础。众多社区中的vue轮子,在vue架构中被Vue.use注册即可使用。
  • react的语法基础是JSX,react中没有指令,元素渲染、条件渲染、列表渲染、动态样式都是基于JSX语法的。在webpack环境中,要安装@babel/core、@babel/preset-react等,实现对JSX的编译。React表单是单向绑定的,推荐使用受控表单。组件封装可以是类组件,也可以函数式组件,其中props是React组件化的核心。

(2)从组件通信的角度讲

  • 在vue组件通信中,跨组件通信的手段极其丰富且灵活,常用的通信方案有父子组件通信、ref通信、事件总线、provide/inject、parent/children、listeners/attrs、slot插槽通信等。除此之外,在vue中还可以使用vuex 或 mobx 来实现跨组件通信。总体上来讲,vue的组件通信极其灵活,自上而下、自下而上都是容易实现的;也正是因为过于灵活,这会“诱惑”开发者容易滥用通信手段,导致vue项目呈现出“易开发、难维护”的现状。
  • 在react中数据是单向数据流,在组件树中数据只能自上而下地分发和传递。state是组件自有的状态数据,props是父级组件传递过来的数据。在react中最最基本的通信方案是状态提升,还有React上下文也可以实现自上而下的数据流。鉴于react这种数据流的特性,即使集成了Redux仍然会呈现出单向数据流的特征,因此React数据流更容易被管理,配合Redux一起更适合做中大型的项目开发。

(3)从底层原理的角度讲

  • vue支持指令是因为背后有vue-template-compiler这个编译器的支持,把带有指令的视图模板转化成AST抽象语法树,进一步转化成虚拟DOM。vue的响应式原理是使用了 Object.defineProperty 进行了数据劫持,数据劫持发生vue组件的创建阶段,vue的响应式原理和mobx状态管理的响应式原理相似,这种响应式实现最早出现在 knockout 框架。如果要手写一个简单版本的vue,需要实现Compiler类(用于模板编译)、Watcher类(用于更新视图)、Dep类(用于依赖收集)、Observer类(用于数据劫持)、Vue类(构造函数)等。
  • react自v16以后发生了很多变化,v16以后底层的“虚拟DOM”不再是简单JSON数据了,React采用了最新的Fiber(双向链表)的数据结构,作为“协调”(Diff)运算的基础数据。React背后还提供了强大的 react-reconciler 和 scheduler 库实现Fiber链表的生成、协调与调度。相比vue组件,react在较大组件方面的性能更高。如果要手写一个简易版本的React,其核心要实现以下功能,createElement(用于创建元素)、createDOM/updateDOM(用于创建和更新DOM)、render/workLoop(用于生成Fiber和协调运算)、commitWork(用于提交)等,如果还有支持Hooks,还得封闭Hooks相关的方法。
    (4)从社区发展和未来展望的角度讲
  • vue生态繁荣,用户基础大。vue3.0和vite的诞生给vue生态增加了新的生命力,同时也给vue开发者带来了空前的挑战。vue3.0众多新特性,以组合API、更友好地支持TS为代表,使得vue3.0的写法更加灵活。上手vue3.0并不难,但,要想写出健壮的可维护性更强的vue3.0代码,并不容易,这需要广大的前端开发者有更强大的前端基础功,对MVVM有深刻的理解和沉淀。
  • react生态稳步向前,背后有强大的Facebook开发团队,从类组件编程向Hooks编程的转化指明了前进的方向。React(v18)呼之欲出,让前端开发者对React更具信心。在国内,阿里系的React开源项目繁荣,给以开发者足够的信心,至少三五年内深耕React仍然大有可为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端面试题:谈一谈vue和react的区别? 的相关文章

随机推荐

  • OpenAI时却提示“OpenAI‘s services are not available in your country”

    OpenAI的官网址如下 https openai com blog chatgpt 进入官网后点击下图中红框中的按钮 进入注册页面 上面这句提示的英文很简单 翻译过来 就是OpenAI不允许中国用户使用 那OpenAI允许哪些国家的用户使
  • 用C语言求平均数的四种方法

    1 常规操作 两个数的平均数等于两数之和除以二 int main int a 10 int b 5 int c a b printf d n c system pause return 0 这种方法有一定的缺陷 当a或b的值够大时 以至于超
  • vim编辑器格式化代码

    他丫儿的搞啥子嘛 乱七八糟的 在vim中其实也有像Eclipse中的ctrl shift F 的自动格式化代码的操作 尽管非常强大 但是通常会破坏代码的原有的缩进 所以不建议在python这样缩进代替括号的语言中和源程序已经缩进过的代码中使
  • rabbitMQ 概念及特点

    Solr rabbitMQ rabbitMQ 特点 可靠性 Reliability RabbitMQ 使用一些机制来保证可靠性 如持久化 传输确认 发布确认 灵活的路由 Flexible Routing 在消息进入队列之前 通过 Excha
  • 【ONNX】使用 C++ 调用 ONNX 格式的 PyTorch 深度学习模型进行预测(Windows, C++, PyTorch, ONNX, Visual Studio, OpenCV)

    文章目录 1 安装依赖 2 导出 ONNX 格式的 PyTorch 模型 3 安装 Windows 平台 OpenCV 4 C 下 OpenCV 接口调用 ONNX 模型 1 安装依赖 要使用 ONNX 模型进行预测 就需要使用 onnx
  • C# 当前不会命中断点(调试时不能进入断点)

    相信大家都会遇到这个问题的 而且在我的项目经验中 发生主这个问题的原因特别多 本文把我遇到过的情况都记录下 供大家参考 1 运行调试时模式不对 应该选Debug才能进入断点 如果选择Release是不能的 注意项目属性里的配置也选择成Deb
  • java的背景

    要想学好一门语言 首先得了解这门语言的有什么用 优缺点是什么 才能更好的理解运用 所以 我在此介绍java的基础简介 1 java是以javaee后台开发 java web前台界面构成的体系结构 2 java的优点有 java的平台无关性
  • 用java实现打印功能

    用java实现打印 java awt中提供了一些打印的API 要实现打印 首先要获得打印对象 然后继承Printable实现接口方法print 以便打印机进行打印 最后用用Graphics2D直接输出直接输出 下面代码实现了简单的打印功能
  • android自动点击的实现流程记录

    一个android下自动点击触屏的程序 类似于windows下的按键精灵 自动帮我玩捕鱼达人 目标 用户可以通过配置脚本文件 自定义一系列的操作 例如 点击 长按 拖动 延时 颜色判断 循环 然后用音量 键启动 关闭脚本 思路 1 linu
  • PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码

    PSO粒子群算法优化BP神经网络 PSO BPNN 回归预测MATLAB代码 有优化前后的对比 代码注释清楚 main为运行主程序 可以读取本地EXCEL数据 也可以加载本地数据 mat 使用换自己数据集 很方便 容易上手 以电厂运行数据为
  • 网页版音频播放器,歌词随音乐而动

    制作不易 多多支持 谢谢 我的博客里面还有关于视频播放器的 感兴趣的小伙伴可以来看看 这个是效果图 这是利用audio做的一个歌词随音乐而动的html页面 这个简单的音频播放器是用ajax请求本地服务器的lrc文件 lrc文件就是歌词文件
  • Visual Studio 2019 安装并创建运行C++项目

    Visual Studio 2019 安装并创建运行C 项目 一 安装Visual Studio 2019 在官网下载社区版本的VS2019 https visualstudio microsoft com zh hans rr https
  • LeetCode(力扣)63. 不同路径 IIPython

    LeetCode63 不同路径 II 题目链接 代码 题目链接 https leetcode cn problems unique paths ii 代码 class Solution def uniquePathsWithObstacle
  • 2017-2018-1 20155319 《信息安全系统设计基础》第4周学习总结

    2017 2018 1 20155319 信息安全系统设计基础 第4周学习总结 课堂实践内容 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod c 用myod XXX实现Linux下od tx tc XXX的功能 注意
  • C语言编程获取PE文件导入函数

    include
  • 试题 算法提高 地图 c++

    资源限制 内存限制 256 0MB C C 时间限制 1 0s Java时间限制 3 0s Python时间限制 5 0s 问题描述 炫炫发现了一张藏宝图 图是由一些点和一些连接两个点的边组成的 他知道了每一条边连接哪些点 现在他想知道每个
  • Flutter入门学习(一)在macOS上搭建Flutter开发环境

    开发环境 Mac M1 Xcode Android Studio VSCode 配置Flutter开发环境 按照https flutterchina club 步骤操作即可 如果本地没有 iOS 和 Android 开发环境 建议先安装 X
  • 基于健身-距离平衡和基于学习的人工蜂群的强大优化算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 FDB TLABC是一种基于健身 距离平衡
  • OpwnWrt 路由器MWAN3多线多拨实现方法

    OpenWrt上的MWAN3可以支持多根网线或者多个PPPOE账号的同时拨号使用和负载均衡 并且还可以通过Ping方式来检测中断线路并自动屏蔽中断线路 更厉害的是还支持通过IP 端口 甚至配合dnsmasq使用的域名来进行智能的多线路分流
  • 前端面试题:谈一谈vue和react的区别?

    1 从编程范式的角度讲 在vue loader vue template compiler的支持下 vue可以采用SFC单文件组织的方式实现组件化 vue有指令 使用指令能够方便地渲染视图 vue表单是双向绑定的 vue组件是基于选项式的编