手拉手带你用 vite2 + vue3 + elementPlus 做个博客尝尝鲜(一)

简介: 这里主要是体验一下 vite2 + vue3 做项目是什么样子的,重点在于 vite2 + vue3 方面的介绍,博客只是一个例子,所以博客的功能比较弱,只实现了几个最基本的功能。

vite2

vite就一个字 —— 快,体验了一下确实是快,一开始还以为不支持第三方插件呢,后来试了一下,好多都是支持的。

这里就不干说说理论的了,直接做个简单的项目来体验一下。想来想去还是做个个人博客比较适合,因为从代码的角度来看,博客比较简单,而且大家对博客也比较熟悉,就算没写过也总看过吧。

环境

先介绍一下环境,用VS code写代码,yarn安装资源包。前端用 vite2 建立一个 Vue3 的项目,然后安装路由(vue-router)、UI库(element-plus)、Markdown编辑器(v-md-editor)。没有安装Vuex,不是因为不支持,而是因为感觉有点臃肿,不大喜欢。后端,用webSQL模拟一下MySQL,当然只是SQL语句和数据的简单模拟,因为这样便于做在线演示,省去了做后端的费用。

前端

  • vite2 构建项目。 yarn create @vitejs/app
  • vue3 框架
  • vue-router 路由。 yarn add vue-router@next
  • element-plus UI库。 yarn add element-plus
  • v-md-editor 用于编写博文。 yarn add @kangc/v-md-editor@next 安装的时候要带上@next,否则会报错。
  • vscode 编写代码。

建议使用 yarn,因为可以更快速。快+快才是合理搭配。

后端

用webSQL模拟一下MySQL,重点在前端,所以后端就简略一下,用前端存储代替一下。

博客设计

先做个简单的个人博客,因为是个人版,所以可以省略注册、登录这些功能,表结构也可以简单一点。基础功能:添加博文、显示博文、博文列表+查询+分页、讨论列表和添加讨论。虽然功能弱了一点,但是麻雀虽小五脏俱全,vite2 和 vue3 的基础用法也可以体现一些。

1

功能设计

42.png



001博客功能是不是做成图更明显一些?

2

代码设计

43.png


002代码结构.png

3

model设计

44.png


003model设计.png

model代码

就近原则,还是先把贴出来吧,后面代码比较多,不好找。/src/model/blogModel.js

/**
 * 显示博文用,建表用
 * @returns 博文的全部的属性
 */
export const blog = () => {
  return {
    // id: 0,
    title: '', // 这是一个博客标题
    groupId: 0, // 分组ID
    addTime: new Date(), // 添加时间
    introduction: '', // 这是博客的简介
    concent: '', // 这是博客的详细内容
    state: 1, // 1:草稿;2:发布;3:删除
    viewCount: 0, // 浏览量
    agreeCount: 0, // 点赞数量
    discussCount: 0 // 讨论数量
  }
}
/**
 * 表单用的博文,绑定表单用。
 * * title:文章标题
 * @returns 添加博文需要的属性
 */
 export const blogForm = () => {
  return {
    // id: new Date().valueOf(),
    title: '', // 这是一个博客标题
    addTime: new Date(), // 添加时间
    introduction: '', // 这是博客的简介
    concent: '', // 这是博客的详细内容
    state: 1 // 1:草稿;2:发布;3:删除
  }
}
/**
 * 首页用的博文列表,按需设置字段
 * @returns 博文列表
 */
 export const blogList = () => {
  return {
    id: 0,
    title: '', // 这是一个博客标题
    addTime: '', // 添加时间
    introduction: '', // 这是博客的简介
    viewCount: 0, // 浏览量
    agreeCount: 0, // 点赞数量
    discussCount: 0 // 讨论数量
  }
}
/**
 * 编辑博文用的列表
 * @returns 文章标题列表
 */
 export const articleList = () => {
  return {
    id: 0,
    title: '', // 这是一个博客标题
    addTime: '', // 添加时间
    viewCount: 0, // 浏览量
    agreeCount: 0, // 点赞数量
    discussCount: 0 // 讨论数量
  }
}
/**
 * 建表用的讨论
 * @returns 讨论表
 */
 export const discuss = () => { 
  return {
    // id: 0,
    blogId: 0,
    discusser: '' , // 昵称
    addTime: new Date(), // 时间
    concent: '', // 内容
    agreeCount: 0
  }
}
/**
 * @returns 讨论的model
 */
export const discussList = () => { 
  return {
    id: 0,
    discusser: '' , // 昵称
    addTime: '', // 时间
    concent: '', // 内容
    agreeCount: 0
  }
}


原生js是不需要先定义对象的,只是我感觉把需要的对象放在一起集中管理一下,还是比较方便的,虽然这么做用处不大,因为不是ts,没有任何强制性也没有检查机制,但是还是想集中管理一下。


4

状态设计


45.png


004状态设计.png

状态嘛,简单地说就是多个组件共享的数据,当然这么说不够严谨。

/src/model/blogState.js

import { inject } from "vue"
export const blogState = {
  currentGroupId: 0, // 选择的分组ID。0:没选择
  currentArticleId: 0, // 选择的文章ID。
  editArticleId: 0, // 当前修改的文章ID
  findQuery: { }, // 查询条件
  page: { // 分页参数
    pageTotal: 100,
    pageSize: 2,
    pageIndex: 1,
    orderBy: { id: false }
  }, 
  isReloadDiussList: false
}
/**
* 状态的管理
* * 获取状态
* * 设置当前选择的分组
* * 设置当前选择的文章
* * 设置当前编辑的文章
*/
export default function blogStateManage() {
  // 先把状态取出来,否则在 function 里面无法读取。
  const state = inject('blogState')
  // 子组件里面获取状态
  const getBlogState = (id) => {
    return state 
  }
  // 设置当前选择的分组   
  const setCurrentGroupId = (id) => {
    state.currentGroupId = id
  }
  // 设置当前编辑的文章  
  const setEditArticleId = (id) => {
    state.editArticleId = id
  }
  // 设置更新讨论列表
  const setReloadDiussList = () => {
    state.isReloadDiussList = !state.isReloadDiussList
  }
  return {
    setReloadDiussList, // 设置更新讨论列表
    getBlogState, // 获取状态
    setEditArticleId, // 设置当前编辑的文章
    setCurrentGroupId // 设置当前选择的分组
  }
}

算是一个简易的状态管理吧,先定义一下需要的状态,在main里面注入状态,然后用 inject 提取状态,再写几个设置状态的函数,基本就可以搞定了。

后续想写成插件的形式,当然会完善一些功能,不会这么单薄。

感觉 Vuex 有点太厚重了,这里也不需要那么强大的功能,所以就自己实现了一个简单的。

相关文章
|
22天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
26天前
|
API
vue3知识点:provide 与 inject
vue3知识点:provide 与 inject
31 4
vue3知识点:provide 与 inject
|
26天前
|
API
vue3知识点:readonly 与 shallowReadonly
vue3知识点:readonly 与 shallowReadonly
25 1
vue3知识点:readonly 与 shallowReadonly
|
19天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
45 7
|
20天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
40 3
|
19天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
39 1
|
19天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
41 1
|
22天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
22天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
25天前
|
JavaScript Java API
vue3知识点:setup
vue3知识点:setup
28 5
下一篇
无影云桌面