vue3.0 项目搭建和使用流程


Posted in Vue.js onMarch 04, 2021

最近在重构一个老项目,领导要求使用新的技术栈。好吧,是时候秀一波我新学的vue3.0了。

不多bb,开始我的表演。。。(以下只是我自己个人的理解和使用习惯,仅供参考哦)

一:项目搭建

1. 可以自己配置vite,但是为了节省时间,我就使用脚手架直接搭建。(有兴趣可以研究一下vite,还是很香的)

2. 项目生成:iTerm下: vue create myproject

vue3.0 项目搭建和使用流程

之后根据自己的要求选择不同的配置

vue3.0 项目搭建和使用流程

选择我们需要的3.x

之后按照要求配置一下router,已经pack.json 。。。 然后npm run serve

vue3.0 项目搭建和使用流程

ok。一个基本的3.0项目搭建完成,结束。(那是不可能的)

二: 目录结构

原始的目录结构如下所示:

vue3.0 项目搭建和使用流程

为了方便数据管理,我们需要自定义一些其他的文件。下面是一个简单的demo结构:

vue3.0 项目搭建和使用流程

hooks用来定义一些公共组件的方法,可以在多个组件里面复用,也可以和vuex联用。

typing定义一些你需要使用的ts类型。比如:

vue3.0 项目搭建和使用流程

vue3.0 项目搭建和使用流程

根据不同的组件拆分不同的类型,然后统一在index中导出。index中可以定义一些公共的类型。

request定义一些http请求。

vue3.0 项目搭建和使用流程

base.ts基本路径

api.ts合集api  

http.ts 可以做一下axios请求拦截和配置一下环境。(development, product)

整体配置大致就是这样,把api,以及ts类型集中起来,更方便之后的管理。

在组件内部也需要拆分:

vue3.0 项目搭建和使用流程

这是一个about页面。分为.vue文件和一个内部Hooks的文件夹。.vue文件是基本demo结构。hooks里面根据不同的功能拆分不同的文件。比如:listDownHooks.ts文件就是用来出来下拉菜单的方法集合。还可以单独拆分一个样式文件,(我觉得有点麻烦就没做..)

目录结构就是这样。先在typing定义基本的数据类型,然后再每个组件下的Hooks里面的方法中引入之后在.vue文件里面使用对应的方法。

三: Composition Api

Composition Api是一组基于功能的附加API,可以灵活地组合组件逻辑。配合ts食用更佳~~~

1. defineComponent

从Composition Api中解构出来,配合ts。 定义一个组件:

export default defineComponent({});

如果你不使用ts,也可以使用export default {} 的写法。

2. setup

Composition Api核心的部分,是vue3.0的亮点。替代之前beforeCreate和created生命周期。

vue3.0 项目搭建和使用流程

可以在setup中初始化一些响应式数据。

setup(props, ctx) 接受两个参数,props和ctx(上下文).

props是传统的父传子数据。不建议在setup中解构props,这样会使props失去响应。

ctx中可以解构出,slots,attrs, emit,用法类同于2.0。

3. ref和reactive

用来创建响应式数据的方法。从vue中解构出来  =>    import {ref, reactive} from 'vue';

ref使用:

import {ref, defineComponent} from 'vue';
export default defineComponent({
 setup() {
  const number = ref(0);
  console.log(number); 
  return {
   number
  }
 }
})

通过ref创建一个响应式数据,console看一下。

vue3.0 项目搭建和使用流程

这是一个ref式响应数据,我们在操作的时候通过number.value来操作数据,然后把结果return回去。

ref 声明基本类型和引用类型的区别?

ref声明基本类型,是创建了一个ref的响应式对象

ref声明引用类型,也是创建了一个ref的对象,但是内部是用reactive方法包装的响应式对象

如果你的ref对象被更改在一个reactive里面,可以直接通过key,value方法获取

reactive使用:

import {reactive, defineComponent, toRefs} from 'vue';
export default defineComponent({
 setup() {
  const obj = reactive({   
    menuList: [] as Array<T>
   });
  console.log(number); 
  return {
    ...toRefs(obj);
  }
 }
})

创建一个proxy式的响应数据。通过toRefs将数据return回去。内部是这样的:

vue3.0 项目搭建和使用流程

个人觉得:一些基本类型可以多使用ref定义,对于一个整体的定义,可以使用reactive。

其他:

其他的一些常用的方法比如:computed, watch,等其实用法和2.0差不多。这里不多描述。

四: 基本使用:

用一个基本的新闻列表为例。

vue3.0 项目搭建和使用流程

主要就是在mounted阶段调取数据,在翻页的时候刷新数据。

目录:

src -> views -> News -> Hook ->newsListHook.ts (用来处理列表数据)

在文件中定义一下原始数据。

let dataSource = reactive({
 list: [] as Array<InewsList> // InewsList是数据类型 
});

定义一个newsList() 方法,内部包含一个getList方法用来获取接口数据。一个方法分页请求时候触发,把getList在mounted挂载。之后将数据和方法return出去。代码如下:

/** * 1. 列表请求数据 */import api from '../../../request/api';
import {reactive, onMounted} from 'vue';
import {InewsList} from '../../../typing';
export function newsList(): object { 
 let dataSource = reactive({list: [] as Array<InewsList>});
 function getList(obj: object): void {
  api.newsList(obj).then(res => {
   dataSource.list = res.data.data; })
 };
 function onChange(e: any): void {
  let start = e || 10;
  const obj = {start,num: 10};
  getList(obj);
 }; 
 onMounted(() => {
  const startObj = {start: 1, num: 10};
  getList(startObj);
 }); 
 return {
  dataSource,
  getList,
  onChange
}}

之后src -> views -> News ->News.vue文件中使用。

import {newsList} from './Hook/newslistHook';
export default defineComponent({ 
  name: 'news',
  setup() { 
  const list = newsList();
  return {
   ...list // list中包含着所有定义的数据和方法。
  } 
}})

console一下list:

vue3.0 项目搭建和使用流程

这样就可以直接在vue文件中渲染使用了。

总结一下:把需要用的方还有一些事件(click, mousedown, keyup...)可以放在hook中执行,vue文件就是用来数据渲染。

项目中使用到了antd的Vue框架,大家在使用的时候最好按需加载。毕竟antd太大啦。

import Menu from 'ant-design-vue/es/menu/index'
import Select from 'ant-design-vue/es/select/index'
createApp(App).use(store).use(router).use(Menu).use(Select)

好啦,就到这里啦。新人尝试写vue3.0,不足地方多多指出哦。

以上就是vue3.0 项目搭建和使用流程的详细内容,更多关于vue3.0 项目搭建和使用的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
开发一个封装iframe的vue组件
Mar 29 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
vue使用element-ui按需引入
May 20 Vue.js
VUE递归树形实现多级列表
Jul 15 Vue.js
vue 数据双向绑定的实现方法
Mar 04 #Vue.js
vue3.0中使用element的完整步骤
Mar 04 #Vue.js
VUE实现吸底按钮
Mar 04 #Vue.js
vue实现可移动的悬浮按钮
Mar 04 #Vue.js
vue中axios封装使用的完整教程
Mar 03 #Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 #Vue.js
详解vue3中组件的非兼容变更
Mar 03 #Vue.js
You might like
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python在不同条件下的输入与输出
2020/02/13 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
英国网上电器商店:Electricshop
2020/03/15 全球购物
《雨点》教学反思
2014/02/12 职场文书
项目工作说明书
2014/07/29 职场文书
超市工作总结范文2014
2014/12/19 职场文书
趣味运动会加油词
2015/07/18 职场文书
python - asyncio异步编程
2021/04/06 Python
Python实战之实现康威生命游戏
2021/04/26 Python
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
Python进程池与进程锁之语法学习
2022/04/11 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python