前端发展百花放,一技未熟百技出。未知何处去下手,关注小编胜百书。 我是前端人,专注分享前端内容!


本篇文章主要是,使用 vite 创建一个vue3 项目,实践 vie-router4 vuex4 结合 componsition API 的使用。目的是让未接触过 vue3 的同学快速上手。

一、vue3.0 创建项目

vue3 创建项目的时候有两种方式,第一种就是官方推荐的 vite 。另外一种就是使用 webpack 创建。

1.1、vite 创建项目

vite 需要 Node.js >= 12.x版本。所以使用 vite 搭建项目之前,请先检查 node 版本!

运行 :$ npm init vite@latest 命令,然后按照提示信息选择创建项目的类型。具体的步骤可以参考《什么,你还使用 webpack?别人都在用 vite 搭建项目了》文章。

也可以通过附加命令行选项,指定使用的模板。如:

npm init vite@latest my-vue-app --template vue

使用最新 vite 创建 vue 模板项目。

项目目录如图所示:

1.2、webpack 创建项目

使用 vue/cli 脚手架创建 vue3 项目时,需要升级 vue cli v4.5版本!使用 vue -V 检查版本,如果版本过低时,请全局重新安装。

npm install -g @vue/cli 

使用命令,开始创建项目:

vue create project-name

选择需要创建 vue3 项目,根据提示创建项目就可以了。

1.3、vite 与 webpack 相比优缺点

Vite

Webpack

vite 启动不需要打包,开发服务器比 Webpack 快 10-100 倍

webpack先打包,然后启动服务,比 vite 慢很多

热更新时,按需加载

热更新时,全部加载

仅支持 vue3

支持 vue 各个版本

与 CommonJS 模块不完全兼容

支持 CommonJs

在本篇文章内,我们选择 第一种方式 vite 创建一个 learn-vue3 的项目。

二、vue-router4

项目创建完成之后,我们要做的第一件事就是配置路由了,添加路由的时候,需要在 main.js 内引入 router。

main.js 代码:

import { createApp } from 'vue'
import App from './App.vue' createApp(App).mount('#app')

此时发现与 vue2 的创建实例完全不一样,vue3 使用的是 createApp ,使用前需要先引入。

2.1、引入路由

在 vue3 中使用 vue-router 时,需要安装 vue-router 4 。

npm install vue-router@4

安装之后可以在 package.json 文件中查看 vue-router 的版本。

{
"dependencies": {
"vue": "^3.2.25",
"vue-router": "^4.0.12"
}
}

vue-router 4 的大多数的 API 是保持不变的,但是在 vue3 中以插件形式存在,所以在创建的时候有一定的改变。

新建 router 文件夹,新建 index.js 文件

// 1、按需引入方法
import { createRouter, createWebHashHistory } from "vue-router"
// 2、定义一些路由
const routes = [
// 每个路由都需要映射到一个组件
]
//3、创建路由实例
const router = createRouter({
routes,
history:createWebHashHistory("./")
}) export default router

然后到 main.js 中,将路由挂载到实例上。

import { createApp } from 'vue'
import App from './App.vue'
import router from "./router/index" createApp(App)
//整个应用支持路由
.use(router)
.mount('#app')

2.2、新建组件配置路由

在 src 目录下,新建 pages 文件夹,新建 index.vue 文件:

<template>
首页入口
</template>

在 router.js 文件内,定义路由

const routes = [
{
path:"/",
component:()=>import("../pages/index.vue")
}
]

然后在 App.vue 文件内添加 router-view 容器。

<template>
<img alt="Vue logo" src="./assets/logo.png" />
<router-view></router-view>
</template>

此时运行项目的时候就能看到新建的 index.vue 的内容了。

三、vue-router4 结合 composition API 使用

3.1、composition API

composition API 中文叫做组合式API,它是 Vue3 特有的,同时 vue3 也能够向下兼容 Options API。

setup 函数就是 composition API 的入口,是处于生命周期钩子函数 beforeCreate 和 created 两个函数之间,所以 setup 中的属性和方法在外部使用时,需要先 return 暴漏出去。

修改 index.vue 组件,采用 composition API 。

<template>
<div>
<input type="text" v-model="msg" />
</div>
</template> <script>
export default {
setup() {
const msg = '前端人,前端魂'
return {
msg,
}
}
}
</script>

3.2、响应式数据

上述的实例中中,如果我们在 template 内,打印 msg 的时候,就会发现响应式失效。

<template>
<div>
<input type="text" v-model="msg" />
{{ msg }}
</div>
</template>

是因为在 setup 内地自定义属性不具备响应式能力。vue3 的响应式原理是 通过底层代理 proxy 将数据包装一下,使得具有响应式。vue3 的响应式原理详情可查看《vue3 学习笔记 (五)——vue3 的 setup 如何实现响应式功能?》

此处 msg 是一个基础数据类型,可以通过 ref 包装下数据,ref 使用之前需要从 vue 中先引入。修改 script 中的代码

<script>
import { ref } from 'vue'
export default {
setup() {
const msg = ref('前端人,前端魂')
return {
msg,
}
}
}
</script>

此时在 input 或在 setup 内改变 msg 的值,如:

<script>
import { ref } from 'vue'
export default {
setup() {
const msg = ref('前端人,前端魂')
setTimeout(()=>{
msg.value = "我是前端人"
},3000)
return {
msg,
}
}
}
</script>

此时无论如何修改 msg 都会保证实时响应。

与 ref 类似的还有 reactive 。ref 是让基础数据类型具有响应式,reactive 是让引用数据类型具有响应式。

3.3、组合式内如何使用路由?

一个项目中,导航选项卡是很常见的,在 App.vue 文件内,加入两个导航:

<template>
<router-view></router-view>
<router-link to="/">首页</router-link>
<router-link to="/my">我的</router-link>
</template>

如果把上述路由跳转方式修改成 push 时,如何修改呢?

composition API 内使用路由时,需要先导入 userRouter 方法,调用该方法,生成 router。

如:

import { useRouter } from 'vue-router'
const router = useRouter()

router 是路由【导航对象】。

想要获取当前路由时,使用 useRoute 方法,如:

import { useRoute } from 'vue-router'
const route = useRoute()

route 是当前激活的路由状态信息对象,包含所有路由中的参数,params, query 都属于它。

修改上边路由跳转方式使用 push ,代码如下:

<script >
import { useRouter } from 'vue-router'
export default{
setup(){
const router = useRouter()
function go() {
router.push({ path: '/my' })
}
return{
go
}
}
}
</script> <template>
<router-view></router-view>
<router-link to="/">首页</router-link>
<button @click="go">我的</button>
</template>

路由传参以及参数获取,只需要把之前的 this.$router 换成 router 就可以啦。

四、vuex 4

vuex 是专为 vue.js 应用程序开发的状态管理模式+库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

在 vue3 中使用的是 vuex4 。vuex4 提供了和 vuex3 相同的 API 。

安装:

npm install vuex@next

package.json 检查版本

"dependencies": {
"vue": "^3.2.25",
"vue-router": "^4.0.12",
"vuex": "^4.0.2"
}

4.1、引入 vuex 状态管理

vuex4 创建 store 实例时,使用 createStore 函数创建,createStore 在使用之前需要先引入。

在 src 目录下,新建 store 文件夹下建 index.js :

import { createStore } from "vuex"

// 创建新的 store 实例
const store = createStore({
state: {
name:'前端人'
},
getters: { },
mutations: { },
actions: { },
modules: { }
}) export default store

在 main.js 中将 store 实例作为插件安装。

import { createApp } from 'vue'
import App from './App.vue'
import router from "./router/index"
import store from "./store/index" createApp(App).use(router).use(store).mount('#app')

4.2、获取状态信息

在 App.js 文件内,使用状态信息,这与 vuex3 使用方式相同。

<template>
获取 state 内的状态信息
{{ this.$store.state }}
获取 getters 内的属性
{{ this.$store.getters.getName }}
</template>

五、vuex 结合 composition API

在 组合式 API 中使用 store 时,需要使用 useStore 把 store 引入组件,然后才能操作。

<script>
import { useStore } from 'vuex'
export default {
setup() {
const store = useStore()
console.log('store', store.state.name)
},
}
</script>

useStore 使用之前,需要先引入,然后调用。

5.1、操作 vuex 状态信息

vuex 中同步操作数据是由 commit 调用 mutations 内的方法,异步操作是 dispatch 调用 actions 内的方法。

示例1:mutations 内方法修改 name 的值。

// 在 index.js 内
mutations: {
changeName(state,data) {
//data 是传入要修改的值
state.name = data
}
} //App.vue 内
<script>
import { useStore } from 'vuex'
export default {
setup() {
const store = useStore()
console.log('store', store.state.name)
store.commit('changeName', '我是前端人')
console.log('store', store.state.name)
}
}
</script>

示例1:actions 内方法修改 name 的值。

actions 内的方法是没有办法直接操作 state 的状态信息,只有 mutations 内的方法才可以,所以需要调用 mutations 的方法,实现修改 。

index.js 代码

import { createStore } from "vuex"

const store = createStore({
state: {
name:'前端人'
},
getters: {
getName(state) {
return state.name
}
},
mutations: {
changeName(state,data) {
state.name = data
}
},
actions: {
changeVal(state) {
// 借用setTimeout 模拟异步操作
setTimeout(() => {
state.commit('changeName','我是前端人')
},2000)
}
},
modules:{}
})
export default store

App.vue 代码

<script>
import { useStore } from 'vuex'
export default {
setup() {
const store = useStore()
store.dispatch('changeVal')
}
}
</script>
<template>
{{ this.$store.state.name }}
{{ this.$store.getters.getName }}
</template>

Vue3 全家桶,从 0 到 1 实战项目,新手有福了的更多相关文章

  1. 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目

    1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...

  2. 助你上手Vue3全家桶之Vue-Router4教程

    目录 1,前言 1,Router 2.1,跳转 2.2,打开新页面 3,Route 4,守卫 4.1,onBeforeRouteLeave 4.2,onBeforeRouteUpdate 4.3,路由 ...

  3. 助你上手Vue3全家桶之Vue3教程

    目录 前言 1,setup 1.1,返回值 1.2,注意点 1.3,语法 1.4,setup的参数 2,ref 创建响应式数据 3,reactive 创建响应式数据 4,computed 计算属性 5 ...

  4. 助你上手Vue3全家桶之VueX4教程

    目录 1,前言 2,State 2.1,直接使用 2.2,结合computed 3,Getter 3.1,直接使用 3.2,结合computed 4,Mutation 4.1,直接使用 4.2,结合c ...

  5. 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)

    vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快.vite 随 vue3 正式版一起发布,刚开始的时候与 vue 绑定在一起 ...

  6. react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

    react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...

  7. vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇

    在<基于 vite 创建 vue3 全家桶>一文整合了 Element Plus,并将 Element Plus 中提供的图标进行全局注册,这样可以很方便的延续 Element UI 的风 ...

  8. ⚡ vue3 全家桶体验

    前置 从创建一个简单浏览器导航首页项目展开,该篇随笔包含以下内容的简单上手: vite vue3 vuex4 vue-router next 预览效果有助于理清这些内容,限于篇幅,不容易展开叙述.由于 ...

  9. Vue3全家桶升级指南一composition API

    1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...

随机推荐

  1. 从ApacheTomcat架构谈面试到源码编译环境v10.0.12

    概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...

  2. Linux关机/重启/用户切换/注销

    目录 1. 关机/重启命令 2. 用户切换/注销 2.1 基本说明 2.2 切换用户 2.3 注销用户 1. 关机/重启命令 # shutdown命令 shutdown -h now # 立即关机 s ...

  3. mongodb存储的基本使用

    Python连接mongodb一般使用pymongo模块 1. pymongo模块的简单使用 ### MongoDB存储 ## 连接MongoDB import pymongo # 建立连接对象,2种 ...

  4. shell 指令

    cat/proc/parttitions df -T pstree ext4 是linux 文件系统

  5. mysql 计算日期为当年第几季度

    select T21620.日期 as F21634, QUARTER('98-04-01')  as quarter                       #返回日期是一年的第几个季度   - ...

  6. CentOS6源码安装zabbix服务器

    1.下载安装包并解压 2.预环境搭建 3.创建zabbix用户,编译安装zabbix 4.配置mysql 5.配置zabbix-server 6.配置apache和php 7.添加开机自启动 1 yu ...

  7. 详解getchar()函数与缓冲区

    1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...

  8. kubernetes部署 docker 容器

    docker 容器相对比较简单,不涉及认证授权,只需要本地启动起来即可,唯一需要注意就是添加flannel网络. # yum remove docker-latest-logrotate docker ...

  9. typora 图床配置方法

    学习计算机的同学,在日常学习中难免会记笔记,写文档.相信大家记笔记大部分使用的都是 Markdown 吧,如果到现在还没接触,那我强烈建议你去学习一下,大概几分钟就可以搞定它. 注:下文用到的所有软件 ...

  10. 在Kubernetes上安装MySQL-PXC集群

    官方部署文档地址:https://www.percona.com/doc/kubernetes-operator-for-pxc/kubernetes.html 一.部署方式 示例在k8s集群(至少3 ...