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的Message和MessageBox的示例
Nov 20 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
vue实现可移动的悬浮按钮
Mar 04 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
js资料toString 方法
2007/03/13 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
python 两个数据库postgresql对比
2019/10/21 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
打架检讨书400字
2014/01/17 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
同学聚会通知短信
2015/04/20 职场文书
开学典礼致辞
2015/07/29 职场文书
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python