Vue实战笔记

时间:2022-06-21 21:08:19

1、组件的属性

Vue实战笔记

例子:

<template>
<div class="hello">
<test-props
name="demo"
title="我是title"
:names="names"
></test-props>
</div>
</template> <script>
import TestProps from 'components/TestProps' export default {
name: 'HelloWorld',
data () {
return {
names: '我是Name'
}
},
components: {
TestProps
}
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="stylus" rel="stylesheet/stylus" scoped>
</style>
<template>
<div class="testProps">
{{names}}
</div>
</template> <script>
export default {
name: 'TestProps',
// inheritAttrs: false, // 用来控制是否显示原生属性
props: {
names: {
type: String,
default: ''
}
}
}
</script> <style lang="stylus" rel="stylesheet/stylus" scoped> </style>

Vue实战笔记

<template>
<div class="testProps">
{{names}}
</div>
</template> <script>
export default {
name: 'TestProps',
inheritAttrs: false, // 用来控制是否显示原生属性
props: {
names: {
type: String,
default: ''
}
}
}
</script> <style lang="stylus" rel="stylesheet/stylus" scoped> </style>

Vue实战笔记

title是原生属性,当inheritAttrs为false时,原生属性不显示

2、事件

Vue实战笔记

3、插槽

Vue实战笔记

4、如何触发组件的更新

Vue实战笔记

Vue实战笔记

Vue在实例化的时候,会对Data里的数据进行getter和setter的转化(说白了就是对这个数据进行一层代理,不管是获取数据还是设置数据的值,都会经过这个代理层,然后再去执行相应的操作),当我们在渲染组件的时候,

需要一些数据,如果这个数据用到了,就会把它放到watch里,如果没有用到,就不会进入这个watch

如果这个数据在watch中,当setter的时候,就会通知watch进行更新

5、计算属性和watch

Vue实战笔记

计算属性依赖的数据,必须是响应式数据,就是data里return的数据

Vue实战笔记

computed能做的,watch都能做,反之则不行

能用computed做的,尽量用computed

6、生命周期

Vue实战笔记

创建阶段:在beforeCreate之前,会执行一个初始化,初始化事件和生命周期;created生命周期会进行data、props、watch、computed的初始化;beforeMount模板编译到render(如果直接编写的是render,这部分会跳过),我们一般用

template,所以会把template编写成render;然后就是render会生成虚拟dom,挂载到真实dom上,然后执行mounted

我们可以在mounted进行异步请求、操作DOM和定时器等,但是Vue并不承诺mounted时候子组件也全部挂载好,所以我们需要this.$nextTick

Vue实战笔记

updated生命周期,也不承诺子组件全部更新完成,所以需要this.$nextTick

在beforeUpdate和updated生命周期中,千万不能更改响应数据,不然会陷入死循环,一更改就触发

Vue实战笔记

Vue实战笔记

https://cn.vuejs.org/v2/guide/render-function.html#向子元素或子组件传递特性和事件

可以用来编写临时变量

Vue实战笔记

Vue实战笔记

把var1和var2传递给这个函数式组件,然后直接返回,然后借助v-slot作用于插槽就可以使用var1、var2了

7、指令的本质是什么?

就是一个语法糖、标志位,当在编译阶段,把template编译成render函数的时候,会把这些语法糖编译成JS代码,这也是为什么jsx和render函数不支持内置指令的原因(jsx也在慢慢支持部分的指令,jsx也是个语法糖,也会编译成render函数)

8、Vue.observable( object )

让一个对象可响应。Vue 内部会用它来处理 data 函数返回的对象。

https://cn.vuejs.org/v2/api/#Vue-observable

9、template和jsx对比

Vue实战笔记

Vue实战笔记

在Vue中,tremplate和jsx都是语法糖,最后都要转换为createElement