声明式渲染
模板语法:就是在vue单文件里面写代码,然后通过声明式的方式将数据绑定到dom。然后被编译成js。经过优化后减少dom操作。
文本插值:{{}},
vue单文件组件:SFC,一种可复用代码组织形式。
声明式渲染:通过改变状态,触发html的更新渲染。
响应式状态:声明方式(reactive只适用于对象、数组,ref适合任何对象)
// reactive处理对象
const counter = reactive({
count: 0
})
console.log(counter.count) // 0
// reactive处理数组
const a =reactive(['1', '2'])
a.push('1')
// ref处理字符串
const message = ref('Hello World!')
console.log(message.value) // "Hello World!"
1. 在 Vue 中,状态都是默认深层响应式的。这意味着即使在更改深层次的对象或数组,你的改动也能被检测到。
2. reactive 返回的是一个原始对象的 Proxy
3. reactive 响应式对象的属性赋值或解构,会失去响应性
4. reactive 不可以随意地“替换”一个响应式对象
5. ref 将传入参数的值包装为一个带 .value 属性的 ref 对象
6. ref 可以响应式地替换整个对象
7. ref 是模板渲染上下文的顶层属性时才适用自动“解包”
8. Vue 能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新push、pop、shift、unshift、splice、sort、reverse
<div v-bind:id="dynamicId"></div>
<div :id="dynamicId"></div>
<h1 :class="title">Make me red</h1>
1. 绑定多个参数
const objectOfAttrs = {
id: 'container',
class: 'wrapper'
}
<div v-bind="objectOfAttrs"></div>
2. 使用 JavaScript 表达式
<div :id="`list-${id}`"></div>
3. 调用函数
{{ formatDate(date) }}
4. 动态参数
<a v-bind:[attributeName]="url"> ... </a>
5. 修饰
事件修饰符:.stop阻止冒泡,.prevent阻止默认事件,.self只触发它自己,.capture,.once,.passive
<form @submit.prevent="onSubmit">...</form>
v-model修饰符
.lazy 每次change事件后更新数据。
.number 自动转为数字。
.trim 去除前后空格。
6. class与style绑定
<div :class="{ active: isActive }"></div>
<div :class="[isActive ? activeClass : '', errorClass]"></div>
<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
7. 透传 attribute 传递给一个组件,却没有被该组件声明为 props 或 emits 的 attribute 或者 v-on 事件监听器, 禁用 Attributes 继承 inheritAttrs: false
<script>
// 使用普通的