react和vue在响应式上的不同理解
创始人
2024-05-29 09:14:10
0

vue和react的区别总是被提及,关于这个问题最近也有了自己的想法。我认为它们之间最大的区别是对于响应数据变化的实现方式不同

vue实现响应的方法是,首先收集依赖这个数据的副作用(视图更新、计算属性等),当数据修改时统一调用依赖这个数据的副作用完成响应。

react实现响应的方法是,需要对比两次数据是否相同,修改前和修改后数据相同则不更新组件,否则触发响应,更新整个组件,包括子组件。


在这个vue例子里:question是一个响应对象,而watch的第二个参数就是监听对象question变化的副作用,除了watch的第二个参数还有视图中的input的第二个p元素都在监听question这个响应对象的变化。

question这个响应对象变化后并不需要重新执行setup这个函数来对比变化前后的值,所以setup函数中的ref('')watch(..., ...)等并没有被重新执行

在vue中数据是可变的,而副作用监听数据的变化。所以在vue中props中的数据是可以被改的,并且vue本身还能够支持props数据变化之后的响应。vue中并不是严格的数据从上往下,事件从下往上的机制。vue的响应以数据源中心向外辐射,换句话说只要数据改了vue就能响应变化,无论这个数据是在什么地方改的。

import { useState, useEffect } from 'react'export default function AboutQuestion() {const [question, setQuestion] = useState('')useEffect(() => {console.log(question)}, [question])return (<>

Ask a yes/no question:(ev) => {setQuestion(ev.target.value)}} />

question: {question}

) }

setState触发时会重新执行整个AboutQuestion函数,包括useStateuseEffect都会被重新执行,只有整个函数执行了才有机会再次判断依赖是否更新从而执行对应的副作用useEffect会对比本次的question和上一次的变量question不一样则会执行其第一个入参函数。重新执行的函数AboutQuestion会返回新的virtualDOM后diff根据结果更新真实DOM。

从这个过程里可以看出来react需要保持数据不可变,如果数据变了useEffectsetSstate是无法正常对比出前后数据的差异的,从而无法正常执行。

所以在react中数据流向是严格从上往下,事件是从下往上。子组件想要改变数据,只能通过数据源组件提供的方法修改,直接修改是不起作用的。

以上就是我理解的react和vue最重要的区别。

相关内容

热门资讯

千岛群岛发生5.8级地震 震源... 中国地震台网正式测定:7月15日05时37分,在千岛群岛(北纬46.30度,东经151.75度)发生...
美股三大指数集体收涨,加密货币... 格隆汇7月15日|美股三大指数集体收涨,道指涨0.2%,纳指涨0.27%,标普500指数涨0.14%...
社交“零糖”莫过度 □ 孟亚生 当下,“零糖社交”成为不少青年的交往常态。某社交平台发布的《2024年社交趋势洞察...
天舟九号货运飞船发射任务取得圆... 来源:中国新闻网 中新网海南文昌7月15日电 (记者 马帅莎)据中国载人航天工程办公室消息,北京时间...
海城3月种药草7月下豆种 收入... 转自:辽宁日报 本报记者 崔治 7月10日,海城市南台镇交界台村的田野上,紫蓝色的水飞蓟花冠在风中舒...
锁金村街道快速解决多年漏水难题... 转自:南京晨报 晨报讯(通讯员 高建 南京晨报/爱南京记者 李琳)近日,玄武区锁金村街道锁四...
五地中学生融铸足球赛举办   在首都体育学院的绿茵场上,中学生们尽情挥洒汗水。实习生 李竞择摄  本报讯(记者 李祺瑶)昨天1...
依托“双凌共建”引育人才 转自:辽宁日报 本报讯 今年年初以来,凌源市聚焦央地、校企人才交流互动,依托“双凌共建”,制定完善人...
如东县生态健康种植养殖示范片区... 为深化区域协作,充分发挥片区大党委凝聚乡村振兴合力、促进资源整合的作用,7月1日,如东县袁庄镇、河口...
泽连斯基分别与特朗普和吕特通话... 来源:央视新闻客户端 当地时间7月14日,乌克兰总统泽连斯基在社交媒体上表示,他与美国总统特朗普进行...