本篇文章给大家谈谈vue高阶组件解决什么问题,以及vue3高阶组件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
react和vue区别
两者本质的区别:模板和组件化的区别
Vue本质是 MVVM 框架,由 MVC 发展而来;
React是前端 组件化 框架,由后端组件化发展而来;
Vue使用 模板
React使用 JSX
React本身就是 组件化
Vue是在 MVVM 上扩展的
共同点:
都支持组件化,都是 数据驱动视图
监听数据变化的实现原理不同:
数据流的不同:
高阶组件本质就是高阶函数,React的组件是一个纯粹的函数,所以高阶函数对React来说非常简单。
Vue中组件是一个被包装的函数,并不简单的就是我们定义组件的时候传入的对象或者函数。
组件通信的区别:
渲染模版的不同:
Vuex和Redux的区别:
diff算法不同:
事件机制不同:
数据是否可变:
react 整体是 函数式 的思想,把组件设计成 纯组件 ,状态和逻辑通过 参数 传入,所以在 react 中,是 单向数据流 ,推崇结合 immutable 来实现 数据不可变 。react在 setState 之后会重新走 渲染 的流程,如果 shouldComponentUpdate 返回的是 true ,就继续渲染,如果返回了 false ,就不会重新渲染
vue 的思想是 响应式 的,也就是基于是 数据可变 的,通过对每一个属性建立 Watcher 来监听,当属性变化的时候,响应式的更新对应的虚拟 dom
vue:
react:
react 的性能优化需要 手动 去做,而 vue 的性能优化是 自动 的,但是 vue 的 响应式机制 也有问题,就是当 state 特别多的时候, Watcher 也会很多,会导致 卡顿 ,所以大型应用( 状态特别多 的)一般用 react ,更加可控
通过js来操作一切,还是用各自的处理方式:
reac t的思路是 all in js ,通过 js 来生成 html ,所以设计了 jsx ,还有通过 js 来操作 css
vue 是把 html,css,js 组合到一起,用 各自 的处理方式, vue 有单文件组件,可以把 html、css、js 写到一个文件中, html 提供了 模板引擎 来处理。
类式的组件写法,还是声明式的写法:
react是 类式 的写法,api很少
vue是 声明式 的写法,通过传入各种 options , api 和 参数 都很多。所以 react 结合 typescript 更容易一起写,vue稍微复杂。vue3支持class类式的写法了
react整体的思路就是 函数式 ,所以推崇 纯组件,数据不可变,单向数据流 ,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于 可变数据 的,支持 双向绑定 。react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的, vue追求的是开发的简单 ,而 react更在乎方式是否正确 。
vue和react的区别之我见
react和vue都是做组件化的,整体的功能都类似,但是他们的设计思路是有很多不同的。使用react和vue,主要是理解他们的设计思路的不同。
react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。react在setState之后会重新走渲染的流程,如果shouldComponentUpdate返回的是true,就继续渲染,如果返回了false,就不会重新渲染,PureComponent就是重写了shouldComponentUpdate,然后在里面作了props和state的浅层对比。
而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。
总之,react的性能优化需要手动去做,而vue的性能优化是自动的,但是vue的响应式机制也有问题,就是当state特别多的时候,Watcher也会很多,会导致卡顿,所以大型应用(状态特别多的)一般用react,更加可控。
react的思路是all in js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等,
vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。
react是类式的写法,api很少,
而vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,vue稍微复杂。
react可以通过高阶组件(Higher Order Components--HOC)来扩展,而vue需要通过mixins来扩展
一个react高阶组件的例子:
react做的事情很少,很多都交给社区去做,vue很多东西都是内置的,写起来确实方便一些,
比如 redux的combineReducer就对应vuex的modules,
比如reselect就对应vuex的getter和vue组件的computed,
vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。
上面主要梳理了react和vue的4点不同:
(其中第3点在vue3.0支持类式写法之后就可以去掉了)
react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定。react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的,vue追求的是开发的简单,而react更在乎方式是否正确。
vue 高阶组件必备知识$attrs,inheritAttrs,$listenters详解
vue 默认情况下,父组件是可以直接给子组件的根元素添加 class 和 style 的,但是有时候我们可能需要在父组件上给子组件添加一些特性绑定( attribute bindings )(我的理解是自定义属性和一些原生属性)到子组件的根元素上, inheritAttrs 就是用来控制子组件根元素上是否允许添加父组件在子组件上定义的特性属性,因为 inheritAttrs 默认为 true ,所以我们在父组件中给子组件添加所有特性绑定,都能绑定到根元素,例如下面
渲染后的dom节点:
把 inheritAttrs 设为 false 后,
渲染后的dom节点:
可以得出上述的结论, inheritAttrs 是用来控制子组件根元素上是否允许添加父组件在子组件上定义的特性属性。
注意:
我们可以把父作用域中传递的所有属性看作一个大的对象 obj ,而 $attrs 会继承 obj 中的一部分属性,这一部分属性的 key 不能为 class ,和 style ,也不能是当前组件声明的 props 值,并且父组件为 v-model 的话,也是不能继承指令封装的 value 值的,若当前组件无props设置, $attrs 则继承除 class 和 style 的所有属性。
通常我们给已封装的组件进行中间处理的时候使用,例如 element-ui 的 el-input ,我们需要把父组件中的传递的 props 直接给子组件的子组件的时候,我们就可以用到 $attrs ,例如:
父组件为:
子组件为:
根据上面所说,去掉 class ,去掉指定的 value ,去掉子组件 props 声明的 limit ,那时我们此的 $attrs 是:
我们对ui框架中的组件进行再封装的时候,例如element-ui中的组件 el-input ,我们把他封装到我们自己的组件内部。
例如 self-input 组件如下,
我们需要把 el-input 组件上自定义的事件传递进去,那么就要用到 $listenters 。
官网的描述:
很容易理解, .native 是给子组件根元素添加事件,自然不是用来传给子组件上的子组件或元素。而我们在父组件上给子组件绑定的所有事件,都会放入 $listeners 中,我们可以在子组件中手动过滤修改后传给子组件中的子组件或者元素上,也可以用 v-on="$listeners" ,直接全部传给子组件或者元素上。
用法也相当简单,例如:
父组件:
子组件:
由于父组件传入的是一个change事件和两个input事件,那我们打印的 this.$listeners 是
下面是一个关于限制小数点的完整demo,感兴趣的可以了解一下
vue高阶组件解决什么问题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vue3高阶组件、vue高阶组件解决什么问题的信息别忘了在本站进行查找喔。
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » vue高阶组件解决什么问题(vue3高阶组件)
1 评论