Day6-vue 学习笔记

动态组件

<template>
  <div>
    组件A
  </div>
</template>
​
<template>
  <div>
    组件B
  </div>
</template>
<template>
  <div>
    <component :is="showComp" />
    <button @click="switchComp">切换组件B</button>
  </div>
</template>
​
<script>
import AComp from '../components/AComp'
import BComp from '../components/BComp'
export default {
  components: { // 组件注册
    AComp,
    BComp
  },
  data () {
    return { // showComp 指向 A组件
      showComp: 'AComp'
    }
  },
  methods: {
    switchComp () { // 点击按钮变为 B组件
      this.showComp = 'BComp'
    }
  }
}
</script>

异步组件

局部引入

 new Vue({
    // ...
        components: {
            'my-component': () => import('./my-async-component')
        }
    })

动态组件:是Vue中一个特殊的Html元素:<component>,它拥有一个特殊的 is 属性,属性值可以是 已注册组件的名称一个组件的选项对象,它是用于不同组件之间进行动态切换的。

异步组件:简单来说是一个概念,一个可以让组件异步加载的方式;它一般会用于性能优化,比如减小首屏加载时间、加载资源大小。

mixins

在vue中提供了一种复用性的操作,所混入的对象包含任意组件的选项(data,生命周期,methods,watch,computed)

基本使用

// 定义一个混入对象
var myMixin = {
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}
​
// 定义一个使用混入对象的组件
var Component = Vue.extend({
  mixins: [myMixin]
})
​
var component = new Component() // => "hello from mixin!"
1 创建文件夹

mixins/form.js mixins/index.js mixins/user.js

user.js

export default{
    data(){
        return{
            userInfo:[]
        }
    },
    methods:{
        getUserDate(){
            console.log('获取用户信息')
        }
    }
}

form.js

export default{
    data(){
        return{
            formInfo:[]
        }
    },
    methods:{
        getFormDate(){
            console.log('获取表单信息')
        }
    }
}

index.js

将其他混入导入到index。js中,然后统一管理,导出

import FromMixin from '/from'
import UserMixin from '/user'
​
export{
    FromMixin,
    UserMixin
}
2 使用

app.vue

<script>
import { FromMixin,UserMixin} from './mixin/index.js'
export default{
    name:'App',
    mixins:[ FromMixin,UserMixin]
}

选项合并冲突

data | computed:

数据对象在内部会进行递归合并,并在发生冲突时以被混入的组件数据优先

会发生覆盖,mixin组件的data会被覆盖

生命周期 | watch

同名钩子函数将合并为一个数组,因此都将被调用。另外,mixin的钩子先调用,组件自身钩子后调用

methods

将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对

会发生覆盖,mixin组件的methods会被覆盖,使用原组件中的方法。

虚拟结点

虚拟节点是Vue中的一种概念,它是对真实DOM节点的抽象表示。虚拟节点是一个JavaScript对象,用于描述DOM节点的结构、属性和内容等信息。通过使用虚拟节点,Vue可以在内存中构建整个DOM树的副本,称为虚拟DOM树(Virtual DOM Tree)。虚拟DOM树可以与真实DOM树进行比较,并根据差异来实现高效的DOM更新,从而提高性能。

渲染函数

渲染函数是Vue中用于生成虚拟节点的函数。它是一种以编程方式描述组件渲染结果的函数。渲染函数接收一个上下文对象作为参数,并返回一个虚拟节点。通过编写渲染函数,开发者可以更加灵活地控制组件的渲染过程,可以动态生成虚拟节点,处理条件渲染、循环渲染等复杂逻辑。

使用渲染函数的主要有以下几种方式:

1. 使用`createElement`函数:`createElement`函数是Vue提供的一个辅助函数,用于创建虚拟节点。可以通过调用`createElement`函数来创建虚拟节点树,并在渲染函数中返回根节点。
2. 使用JSX语法:Vue支持使用JSX语法编写渲染函数,通过Babel等工具将JSX编译为`createElement`函数的调用。使用JSX可以更直观地描述虚拟节点树的结构。

渲染函数的作用是:创建虚拟dom,然后将dom渲染成真实的页面。

当使用渲染函数时,可以通过一个简单的例子来说明其用法和优势。

假设我们有一个简单的Vue组件,用于显示一个按钮和一个数字。点击按钮时,会弹窗

使用模板语法的方式:

<template>
<div>
	123
    <button @click="Click me">Click me</button>
</div>
</template>

  methods: {
    Click me() {
      alert('hello,world')
    }
  }

使用渲染函数的方式:

<script>
Vue.component('test',{}
  render:function(h) {
    const vnode = h('div', 
    {}
    [
     h('button', {
        on: {
          click: function(){
          	alert('hello,world')
          }
        }
      }, 
      'Click me'),
    ])
  return vnode
};
</script>
通过调用函数,我们可以指定节点的标签名、属性、事件和子节点等信息。
使用渲染函数的好处是,我们可以根据动态数据和逻辑来生成DOM结构。

习题

什么是动态组件?

在 Vue 中根据需要动态地渲染不同的组件

什么是异步组件?

是指按需加载的组件,而不是在初始渲染时立即加载

mixin与组件的区别?

1 组件是独立的实体,可以单独存在,具有自己的模板、状态和生命周期。而 Mixin 不能单独存在,必须与组件结合使用。

2 mixin会有命名冲突,而组件是独立的,不会受到其他组件的影响。

keep-alive的作用?

在组件切换时,缓存包裹的组件,保持包裹组件的状态,避免重复渲染。

vue框架引入路由的步骤?
  1. 安装vue-router,命令:npm i vue-router

  2. 应用插件:Vue.use(VueRouter)

  3. 编写router配置项:

    //引入VueRouter,路由整合
    import VueRouter from 'vue-router'
    Vue.use(VueRouter)
    //引入Luyou 组件
    import About from '../components/About'
    import Home from '../components/Home'
    
    //创建router实例对象,去管理一组一组的路由规则
    const router = new VueRouter({
    	routes:[
    		{
    			path:'/about',
    			component:About
    		},
    		{
    			path:'/home',
    			component:Home
    		}
    	]
    })
    
    //暴露router
    export default router
  4. 实现跳转

    <router-link to="/about">About</router-link>
  5. 预留路由出口

    <router-view></router-view>
router中push和replace跳转的区别?

push是往历史堆栈中追加路由记录,replace是替换历史堆栈中的当前路由

什么是路由懒加载?

在访问路由的时候才加载对应的组件。

  • 39
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值