## 1.查看@vue/cli的版本,确保@vue/cli版本在4.5.0以上
vue --version
## 2.安装或者升级你的@vue-cli
## 3.创建
vue create vueproject
# 4.启动
cd vueproject
npm run serve
vite:新一代的前端工具
优点:
开发环境中,无需打包,可快速的冷启动
轻量快速的热加载
//1.创建
npm init vite hello-vue3 -- --template vue
npm init vite 项目名 可以自己选择集成环境
官方文档:https://cn.vuejs.org/api/
总结:Vue3.0中一个新的配置向,值为一个函数,组件中所有用到的:数据、方法等等,均要配置在setup中。
setup函数的两种返回值:
若返回一个对象,则对象中的数据、方法、在模板中均可直接使用(重点)
<script setup>
var name = "marry";
var obj = {
age: 18,
gender: "女",
class: '二'
}
</script>
<template>
<div>
<span>{
{
obj.class}}班的{
{
name}}是一名{
{
obj.gender}}生,今年{
{
obj.age}}岁了~~~</span>
</div>
</template>
//二班的marry是一名女生,今年18岁了~~~
若返回一个渲染函数,则可以自定义渲染内容(了解)
//页面中会显示一个h1标签,标签的内容是"vue3返回渲染函数"
<script>
import {
h} from 'vue'
export default {
setup() {
// 返回一个渲染函数
// h相当于document.CreateElement()
return ()=>{
return h("h1","vue3返回渲染函数")}
}
}
</script>
注意:
总结:定义一个响应式的数据
import {ref} from “vue”
语法:const xxx = ref(“value”)
注意
<script setup>
import {
ref
} from "vue"
var name = "marry";
var obj = ref({
age: 18,
gender: "女",
class: '二'
})
function change() {
obj.value.age++
}
</script>
<template>
<div>
<span>{
{
obj.class}}班的{
{
name}}是一名{
{
obj.gender}}生,今年{
{
obj.age}}岁了~~~</span>
<button @click="change">年龄+1</button>
</div>
</template>
<script setup>
import {
reactive
} from "vue"
var name = "marry";
var obj = reactive({
age: 18,
gender: "女",
class: '二'
})
function change() {
obj.age++
}
</script>
<template>
<div>
<span>{
{
obj.class}}班的{
{
name}}是一名{
{
obj.gender}}生,今年{
{
obj.age}}岁了~~~</span>
<button @click="change">年龄+1</button>
</div>
</template>
ref \reactive 区别用法?
vue2.0的响应式
实现原理
对象类型:通过Object.definedProperty()对属性的读取、修改进行拦截(数据劫持)
数组类型:通过重写更新数据的一系列方法来实现拦截。(对数组的方法进行了包裹)
Object.defineProperty(data,"count",{
get(){},
set(){}
})
存在问题:
let person = {
name:"李国栋",
age:18
}
let p = {};
Object.defineProperty(p,"name",{
get(){
console.log("有人读取数据时调用");
return person.name
},
set(value){
console.log("有人修改了数据,我要去更新页面");
person.name = value
}
})
vue3.0的响应式
let person = {
name:"李国栋",
age:18
}
let p = new Proxy(person,{
// 读取
get(target,proname){
// target表示原对象 proname表示对象名
console.log("有人读取了person上的属性",target);
return target[proname]
},
// 修改或者增加
set(target,proname,value){
console.log("有人修改了person上的属性,我要去更新了");
target[proname] = value
},
// 删除
deleteProperty(target,proname){
console.log("有人删除了person上面的属性,我要去调用了");
return delete target[proname]
},
});
引入:import xxx from (“组件路径”)
引入后直接使用:
<script setup>
import {
ref,
reactive,
computed
} from "vue"
let arr = reactive([{
title: '鱼香肉丝',
price: 20,
count: 1
},
{
title: '水煮肉片',
price: 35,
count: 1
},
{
title: '白米饭',
price: 3,
count: 1
},
])
let total = computed(() => {
console.log(66666, "计算总价")
return arr.reduce((n1, n2) => {
return n1 + n2.price * n2.count
}, 0)
})
let change1 = () => {
arr[0].count = 10
}
function add(index) {
arr[index].count++
}
function des(index) {
arr[index].count--
}
</script>
<template>
<div class="box">
<div v-for="(el,index) in arr">
<div>{
{
el.title}}----{
{
el.price}}元----
<button @click