当前位置:   article > 正文

Vue中的响应式布局_vue响应式布局

vue响应式布局

一、响应式

model变化,导致view变;view变,导致model变。

只有在data中定义的变量才具有响应式。

二、v-for的更新检测

数组哪些方法可以触发自动更新?

  • 7个改变原数组的方法 push、pop、unshift、shift、sort、reverse、splice

  • 数组哪些方法不可以触发自动更新? slice,join,concat, indexOf

解决方案(更新): 覆盖data中的数组

  • 通过数组的下标更改数组的元素?

数组是变化,没有触发setter方法,没有进一步触发watcher方法更新dom

vue中提供了 this.$forceUpdate() 强制更新页面

三、v-for的就地更新检测

当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。

如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,

而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。

`v-for` 的默认行为会尝试原地修改元素而不是重新创建

没有带key, 按照元素比对,默认使用的是v-for的就地复用

带key,key的值是index, 按照key的值index来比对,默认使用的是v-for的就地复用

带key,key的值是id, 按照id的值来比对,直接将创建好的元素插入到指定为止

带key,提高for循环的执行效率

key值的选择,如果有id使用id,如果没有id使用index

四、diff算法

diff算法: 在内存中进行比对虚拟dom

1. 同级比较

2. 先比较根元素,根元素改变,删除重建

3. 根元素没有变化,属性变化了, 复用标签,打补丁更新属性

五、虚拟dom

虚拟dom:

1. 存在内存中

2. 对象形式

3. 保存着dom的关键信息

六、过滤器filter

过滤器:处理一些数据

  1. // <div id="app">
  2. // <!-- {{timeChuo | 过滤器名}} -->
  3. // {{timeChuo | timeFilter}} <br>
  4. // {{msg | reverseMsg }} <br>
  5. // {{msg | reverseMsg | add$}} //一个数据可以添加多个过滤器
  6. // </div>
  7. const vm = new Vue({
  8. el: '#app',
  9. data: {
  10. timeChuo:1678851265350,
  11. msg:"hello world"
  12. },
  13. filters: { // 过滤器
  14. timeFilter:function(val){ // 处理的元素(|之前的数据)
  15. var date = new Date(val); // 将时间戳转为日期对象,
  16. return date.toLocaleString();//再将日期对象转为字符串
  17. },
  18. reverseMsg:function(val){ // val是默认的,是你处理的元素,x是reverseMsg的参数
  19. return val.split("").reverse().join("")
  20. },
  21. add$:function(val){
  22. return val +"!"
  23. }
  24. }
  25. })

Vue3中弃用了过滤器

七、认识组件

  1. 全局注册组件: 注册组件的名字可以是驼峰法(MyHeader,myHeader),
  2. 使用组件的时候如果是在body中使用必须短横线,如果在template中写的可以使用驼峰法(短横线命名法 my-header )
  3. app.component("组件的名字",{ // 配置里面有
  4. template:``,
  5. data(){
  6. return {}
  7. },
  8. methods:{},
  9. computed:{},
  10. watch:{},
  11. })
  12. vue2中注册组件时,必须只能出现一个根组件
  13. template:'<div> 所有的内容 </div>',
  14. vue3中注册组件时,可以没有根组件
  15. template:'<div></div> <div> </div><div> </div>',
  1. 局部注册组件
  2. let app = Vue.createApp({
  3. data () {
  4. return {
  5. }
  6. },
  7. components: { // 局部组件的注册
  8. // 组件的名字:对象形式的配置项
  9. 'my-header':{
  10. template:`<div>{{msg}}</div>`,
  11. data() {
  12. return {
  13. msg:"子组件"
  14. }
  15. },
  16. }
  17. }
  18. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/871946
推荐阅读
相关标签
  

闽ICP备14008679号