02_使用Vite搭建Vue3项目

首先插件添加:Live Server、Vue - Official、Vue VSCode Snippets、别名路径跳转

官网:Vite | 下一代的前端工具链 (vitejs.dev)

1.创建一个文件夹VueApp,运行cmd转到该目录下,执行命令:npm create vite@latest

2.然后转到vuedemo目录下命令:cd vuedemo,

3.执行命令:npm install。文件夹内会新添加node_modules文件夹和package-lock.json文件。

npm会根据项目根目录下的package.json文件中的dependencies和devDependencies字段来安装所需的包。这些包将被下载并安装到项目的node_modules目录中。

4.运行该项目:npm run dev

5.修改项目:

删除\vuedemo\src\style.css文件。

删除\vuedemo\src\components\HelloWorld.vue文件。

\vuedemo\src\main.js内的 “import './style.css” 删除掉。

\vuedemo\src\App.vue内的 script template  style内的东西都删除掉

 

6.修改Vue内容模板路径:C:\Users\Lua\.vscode\extensions\sdras.vue-vscode-snippets-3.1.1\snippets\vue.json

app.vue

<script setup>
import {reactive } from 'vue'
const web=reactive({
  show:true
});
const toggle=()=>web.show=!web.show;
</script>

<template>
<h3>{{web.show}}</h3>
<p v-show="web.show">Hello....</p>
<button @click="toggle">切换</button>
</template>

<style  scoped>
</style>

 

运行:npm run dev

 

导入组件

在线components文件内创建header.vue,footer.vue两个文件

app.vue

<script setup>
import Header from './components/header.vue';
import Footer from './components/footer.vue';
</script>

<template>
<Header/>
<hr/>
<Footer/>
</template>

<style  scoped>
</style>

Header和Footer必须为大写

 

 

父传子 defineProps

app.vue是父组件,因为它包含了header.vue和footer.vue两个子组件

1.通过数组方式传递

app.vue

<script setup>
import Header from './components/header.vue';
import Footer from './components/footer.vue';
</script>

<template>
<Header PName="张三" Page="24"/>
<hr/>
<Footer/>

</template>

<style  scoped>
</style>

header.vue

<script setup>
    const user=defineProps(["PName","Page"]);
    console.log(user);
</script>

<template>
Hello
</template>

<style  scoped>
</style>

 

2.通过对象方式传递

app.vue

<script setup>
import Header from './components/header.vue';
import Footer from './components/footer.vue';
const Pdata={
  name:"李四",
  age:25
}
</script>

<template>
<Header PName="张三" Page="24"/>
<hr/>
<Footer v-bind="Pdata"/>

</template>

<style  scoped>
</style>

footer.vue

<script setup>
/*
const Pdata=defineProps({
    name:String,
    age:Number
});
*/
const Pdata=defineProps({
    name:String,
    age:{
        type:Number,
        required:false,////true表示必传属性,若未传则会提示警告信息
        default:26  ////未传默认值
    }
});

console.log(Pdata);
</script>

<template>
你好.....
</template>

<style  scoped>
</style>

 

3.传递响应式数据

app.vue

<script setup>
import { reactive } from 'vue'
import Header from './components/header.vue';
import Footer from './components/footer.vue';
const Pdata=reactive({
  name:"李四",
  age:26,
  id:1
});

const AddAge=()=>{
  Pdata.id++;
  console.log(Pdata.id)
}

</script>

<template>
<Header PName="张三" Page="24"/>
<hr/>
<button @click="AddAge">ID自增</button>
<br/>
<Footer v-bind="Pdata"/>

</template>

<style  scoped>
</style>

footer.vue

<script setup>
const Pdata=defineProps({
    name:String,
    age:{
        type:Number,
        required:false,////true表示必传属性,若未传则会提示警告信息
        default:26  ////未传默认值
    },
    id:Number
});
console.log(Pdata);
</script>

<template>
<h3>fooooooooooooooooooter</h3>
age:{{ Pdata.id }}
</template>

<style  scoped>
</style>

 

 

子传父 defineEmits

header.vue

<script setup>
    //子传父
    const dateuser=defineEmits(["getuser"]);
    dateuser("getuser",{name:"王五",age:33});
</script>

<template>
Hello
</template>

<style  scoped>
</style>

app.vue

<script setup>
import { reactive } from 'vue'
import Header from './components/header.vue';
import Footer from './components/footer.vue';

const getuserinfo=(data)=>{
  console.log("-------子传父----------")
  console.log(data);
}

</script>

<template>
<Header  @getuser="getuserinfo"/>
<hr/>
<button @click="AddAge">ID自增</button>
<br/>
<Footer />

</template>

<style  scoped>
</style>

传递事件

header.vue

<script setup>
    //子传父
    const dateuser=defineEmits(["getuser","useradd"]);
    dateuser("getuser",{name:"王五",age:33});

    const add=()=>dateuser("useradd",10);
</script>

<template>
<button @click="add">添加用户</button>
</template>

<style  scoped>
</style>

app.vue

<script setup>
import { reactive } from 'vue'
import Header from './components/header.vue';

const getuserinfo=(data)=>{
  console.log("-------子传父111----------")
  console.log(data);
}

const getuseradd=(data)=>{
  console.log("-------子传父222----------")
  console.log(data);
}

</script>

<template>
<Header PName="张三" Page="24" 
 @getuser="getuserinfo" @useradd="getuseradd"/>
<hr/>
</template>

<style  scoped>
</style>

 

生命周期函数

挂载阶段

       onBeforeMount

               在组件实例即将被挂载到DOM树之前调用

               此时模板还未编译或渲染到DOM,通常用于执行初始化操作,

               如:获取异步数据、设置初始属性值等

       onMounted

               在组件成功挂载到DOM并完成首次渲染后调用

               此时可以访问和操作DOM元素,

               并执行与页面交互相关的逻辑

更新阶段

       onBeforeUpdate (由于响应式数据变化)

               在组件更新之前即将重新渲染时调用

               可以根据新的参数判断是否需要进行特殊处理,

               甚至可以选择阻止此次更新过程

       onUpdated

               在组件完成更新并重新渲染后调用

               可以基于新的渲染结果处理更新后的数据

卸载阶段

       onBeforeUnmount

               在组件从DOM中销毁之前调用

               用于释放资源,如:清理计时器、解绑事件监听器等

       onUnmounted

               在组件已经从DOM中移除并销毁后调用

               确保组件所占用的所有资源都被正确释放

错误处理

       onErrorCaptured

               在捕获到组件中的错误时调用

               用于处理错误,如:记录错误日志等

 

posted @ 2024-04-08 18:15  野码  阅读(228)  评论(0编辑  收藏  举报