react和vue对比

vue3和react hook有什么区别

技术生态圈不一样:

(可能不是固定,在发展阶段会更改技术栈)

  • vue3:vue + pinia + vite
  • react:react + webpack + redux | dva

声明式响应状态

  • vue:vue2时用的是data,vue3中用的ref和reactive
  • react: 类class继承时用是setState,hook时用的useState钩子形式

生命周期对比

  • vue2
vue2:
	beforeCreate 创建前
	created 创建后
	beforeMount 挂载前
	mount 挂载后
	beforeUpdate 更新前
	updated 更新后
	beforeDestroy 销毁前
	destroy 销毁后
  • vue3
	setup 开始创建组件之前,在beforeCreate和created之前执行。创建的是data和method
	onBeforeMount 挂载前
	onMounted 挂载后
	onBeforeUpdate 更新前
	onUpdated 更新后
	onBeforeUnmount 卸载前
	onUnmounted 卸载后
	onErrorCaptured  捕获后代组件传递错误时调用
	onRenderTracked (仅在开发模式下调用)组件渲染过程中追踪到响应式依赖时调用
	onRenderTriggered  当响应式依赖的变更触发了组件渲染时调用。
	onActivated 若组件实例是<KeepAlive>缓存树的一部分,当组件被插入到DOM中时调用
	onDeactivated 若组件实例是<KeepAlive>缓存树的一部分,当组件从DOM树中被移除时调用
	onServerPrefetch 在组件实例在服务器上被渲染之前调用
  • react class
constructor 在react组件挂载之前,会调用它的构造函数
getDerivedStateFormProps 在调用render方法之前调用,并且在初始化挂载及后续更新时都会调用
render class组件中唯一必须实现的方法
componentDidMount 组件挂载后(插入DOM树中)立即调用
shouldComponentUpdate 当state或props发生变化时,shouldComponentUpdate会在渲染执行之前调用。
getSnapshotBeforeUpdate 在最近一次渲染输出(提交到DOM节点)之前调用
componentDidUpdate 在更新后会被立即调用
componentWillUnmount 在组件卸载或销毁之前直接调用
  • react hooks:
useEffet(() => {}, [])
例:
// componentDidMount与componentDidUpdate类似
useEffect(()=>{  
    return function cleanup() {
        // 需要在 componentWillUnmount 执行的内容
    }
    
}, [])

注:其实vue3改版后的生命周期依然有点繁重,而react hook的生命周期更轻量

模版语法不同

vue中,会有什么v-关键字使用:如v-if,v-for,v-model等,而vue的
事件都是以@或v-on:
vue2中.vue文件的顺序:template -> script -> style,并且template模版下不能有多个子元素
vue3中.vue文件顺序:script -> template -> style ,并且template模板下可以有多个子元素

而react没有向v-if这类的指令,而类组件中render(),而在函数组件中可以直接return,绑定click事件时:onClick={}

对于vue我目前还没细了解源码对虚拟dom的处理方式,但是看vue渲染机制我的理解是通过上次创建的vnode做缓存处理,官方描述是有两个虚拟dom,渲染器会有比较地遍历它们,找出它们的区别,并应用这其中的变化到真实dom上。
参考:https://juejin.cn/post/6997579802215448606
在这里插入图片描述

但是在react中,react15以前,用的是将更新的子组件进行递归,更新一开始就无法停止,不是造成卡顿就是页面空白等bug,所以16改成类fiber等一种形式,是双缓存的形式。

引入公共组件不同

vue可以定义全局的公共组件,然后只进行一次引入,全局使用
而react需要不通文件中一次次性的引入

计算不同

  • vue2
computed: {
    事件名(){},
    ...
}
  • vue3
import { reactive, toRefs ,computed} from "vue";
// 第一种写法, 直接用
const testCompte = computed(() => {})

// 第二种写法,写在reactive中
let shopNum = reactive({
      num: computed(() => {
        let nums = 0;
        obj.value.forEach((item) => {
          if (item.checked) {
            nums += item.num;
          }
        });
        return nums;
    }),
});

vue2和vue3的计算属性对比,vue2是一种js对象形式的,而vue3像一种钩子的形式,来处理,直白点就是参数传入
详细的计算属性对比参考

  • react:
	useMemo(() => {} , [])

vue和react对比参考

灵活性、开发速度、性能和其他(如何选择框架

react主要弱点是它的文档,库更新太频繁,文档无法跟上,对于开发人员来说不方便。

  • 灵活性:
    • react提供很大的灵活性,可以根据特定需求进行定制,它支持各种库和工具,尽管这些扩展来自于第三方。
    • vue非常灵活,但与react不同的是,它对各种库有强大的本机支持
  • 工具开发:
    • react hooks是的设置和初学者上手较为友好,有许多第三方插件可用,但是一些广泛使用的扩展不是官方的。
    • vue也是用户和初学者友好,覆盖了Native模块的大多数开发需求,但是它缺乏广泛的第三方插件,可能不适合良好的维护。
  • 工具:
    • react为组件提供了强大的调试工具,但它的CLI在性能上有限制,
    • vue提供了强大的调试工具,并利用该套件进行快速开发,确保速度和效率。
  • 性能:
    • react提供可靠的性能并支持服务器站点渲染,并提供了全面的文档和很棒的社区,但它不像vue那么快。
    • vue 提供了非常快的性能,还支持服务器的渲染文档,vue的社区较小,但是拥有出色的且清晰简洁的文档。

注:目前写的对比还不够,会根据后期项目中再继续做总结

vue3和react为什么都采用hook的形式

PS:起这个标题是因为,我在面试中,有面试官问过我这个问题,我用vue2做项目是两年多前的事情了,刚学vue3,对于一些地方了解还是比较浅显。
但是还算是最了解react吧,当初从react class 向 react hooks转型的时候,就是因为我看到来react官网上的一个将class编程和hooks编程的相同功能代码做了对比,而hooks的代码量显然少了将近一半儿,可读性强,维护友好,重用性高。
我认为 vue3 更准确的来说,不是严格意义上的hook形式,而是Composition API,除一些生态圈的变化外,vue3与react hooks相比来说,react hooks几乎所有的方法都是基于钩子进行开发的。
但无论是vue还是react,改用hooks形式开发,都是为了解决bug
在这里插入图片描述

vue3和react的好处在于:

  • 更容易重用状态逻辑并分离关注点
  • 没有什么“this”绑定问题
  • 优化:hook可能会减少包的大小
  • 利于未来发展

等等,详细了解可点击跳转

做的笔记还有很多地方没有去进行过多的论证,如有问题,还请指出。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值