All Projects → xieyezi → 2019-ncov-vue3-version

xieyezi / 2019-ncov-vue3-version

Licence: other
新型冠状病毒实时疫情 Vue-Compostion-Api版本 (Vue3 + TypeScript)

Programming Languages

Vue
7211 projects
javascript
184084 projects - #8 most used programming language
typescript
32286 projects
Dockerfile
14818 projects
HTML
75241 projects

Projects that are alternatives of or similar to 2019-ncov-vue3-version

vue3-demo
💡 vue3新特性示例: 响应式API、组合式API、TodoMVC
Stars: ✭ 114 (+107.27%)
Mutual labels:  vue3, vue3-demo, composition-api, vue3-typescript
v-pip
🖼 Tiny vue wrapper for supporting native picture-in-picture mode.
Stars: ✭ 30 (-45.45%)
Mutual labels:  vue3, vue3-demo, composition-api
vue3-docs
vue中文社区,vue3 中文文档
Stars: ✭ 180 (+227.27%)
Mutual labels:  vue3, vue3-demo, vue3-typescript
Vue3 News
🔥 Find the latest breaking Vue3、Vue CLI 3+ & Vite News. (2021)
Stars: ✭ 2,416 (+4292.73%)
Mutual labels:  vue3, composition-api, vue3-typescript
taro3-vue3-template
一个基于 Taro3 和 Vue3 框架微信小程序模版。 核心技术采用Taro3、Vue3、TypeScript、NutUi、Vux4/Pinia、VueUse
Stars: ✭ 115 (+109.09%)
Mutual labels:  vue3, vue3-demo, vue3-typescript
vue3-webpack-boilerplate
Vue 3 Webpack Boilerplate (Vue 3, Vue Router 4, Vuex 4, Typescript)
Stars: ✭ 69 (+25.45%)
Mutual labels:  alpha, vue3, vue3-typescript
vue3-form-validation
Vue Composition Function for Form Validation
Stars: ✭ 18 (-67.27%)
Mutual labels:  vue3, composition-api
vue-simple-password-meter
Vue Simple Password Meter is a simple password strength meter component written in vanilla js and extremly lightweight
Stars: ✭ 65 (+18.18%)
Mutual labels:  vue3, vue3-typescript
vue-snippets
Visual Studio Code Syntax Highlighting For Vue3 And Vue2
Stars: ✭ 25 (-54.55%)
Mutual labels:  vue3, composition-api
adminlte-3-vue
Vue 3.2.31 start-up project with AdminLTE 3.2.0 template
Stars: ✭ 134 (+143.64%)
Mutual labels:  vue3, vue3-typescript
layui-vue
采用 layui 风格的 vue3 组件库。(UI一直是个痛,那就先基于现有的UI,先封装几套玩玩。)
Stars: ✭ 15 (-72.73%)
Mutual labels:  vue3, vue3-typescript
vue3.0-elemenplus-admin-template
一个基于Vue3.0和Element-plus的后台管理模板,一个使用Koa2作为后台程序使用MongoDB作为缓存数据库和MariaDB作为数据的后台管理模板系统
Stars: ✭ 20 (-63.64%)
Mutual labels:  vue3, vue3-typescript
vue-unstated
A tiny state management library for Vue Composition API.
Stars: ✭ 30 (-45.45%)
Mutual labels:  vue3, composition-api
seal-vue
本项目为 https://github.com/hequan2017/seal 项目 前端vue版本 基于 iview-admin 2.5.0 支持 动态菜单 本项目已停止开发!因长时间未对代码进行维护,可能会造成项目在不同环境上无法部署、运行BUG等问题,请知晓!项目仅供参考!
Stars: ✭ 16 (-70.91%)
Mutual labels:  vue3, vue3-demo
v-bucket
📦 Fast, Simple, and Lightweight State Manager for Vue 3.0 built with composition API, inspired by Vuex.
Stars: ✭ 42 (-23.64%)
Mutual labels:  vue3, composition-api
v-intl
Add i18n to your awesome Vue 3 app 🔉
Stars: ✭ 13 (-76.36%)
Mutual labels:  vue3, composition-api
vuex-typescript
boilerplate repository for vue 3 in typescript, dynamic code split && server-side rendering
Stars: ✭ 54 (-1.82%)
Mutual labels:  vue3, vue3-typescript
vue3.0-template-admin
本项目基于vue3+ElementPlus+Typescript+Vite搭建一套通用的后台管理模板;并基于常见业务场景,抽象出常见功能组件;包括动态菜单,菜单权限、登录、主题切换、国际化、个人中心、表单页、列表页、复制文本、二维码分享等等
Stars: ✭ 500 (+809.09%)
Mutual labels:  vue3, vue3-typescript
Newbee Mall Vue3 App
🔥 🎉Vue3 全家桶 + Vant 搭建大型单页面商城项目,新蜂商城 Vue3 版本,技术栈为 Vue 3.0 + Vue-Router 4.0 + Vuex 4.0 + Vant 3.0。
Stars: ✭ 3,011 (+5374.55%)
Mutual labels:  vue3, vue3-demo
vue-reuse
基于composition-api的hooks函数库
Stars: ✭ 28 (-49.09%)
Mutual labels:  vue3, composition-api

you.png

2019-ncov-vue3-version

线上地址
git地址

因为疫情太过严重,只能呆在家,所以前几天用 React+ Antd 写了一个疫情查询小工具:React 版本,也算为疫情的防控做了一点点贡献。这两天呢,看见 Vue3-Alpha 版本都出到 v3.0.0-alpha.4 了,如图:

QQ20200211-170124@2x.png 在这个版本中,主要的工作就只剩下处理服务器端渲染了,所以Vu3真的是指日可待了。同时官方呢希望我们能够积极试用 Vue 新版本。为了响应号召(只是因为在家太无聊了),所以我们来试一试利用Vue3: Vue-Composition-Api + Typescript 来重构我们的疫情查看小工具。

效果截图

我们先来看看效果截图:


Vue3 简单知识

开始动手之前,我们先来学习一点相关知识。

setup

setup() 函数是 vue3 中,专门为组件提供的新属性。它为我们使用 vue3 的 Composition API 新特性提供了统一的入口。setup 函数会在 beforeCreate 之后createdsetup() 函数接收两个参数,setup(props,context)。其中:

  • props: 接收 props 数据
    在 props 中定义当前组件允许外界传递过来的参数名称:
      props: {
          propsName: String
      }
    通过 setup 函数的第一个形参,接收 props 数据:
      setup(props) {
         console.log(props.p1)
      }
  • context: 这个上下文对象中包含了一些有用的属性,这些属性在 vue 2.x 中需要通过 this 才能访问到,在 vue 3.x 中,它们的访问方式如下:
      setup(props, context) {
          context.attrs
          context.slots
          context.parent
          context.root
          context.emit
          context.refs
      }

reactive()

reactive() 函数接收一个普通对象,返回一个响应式的数据对象。 我们来看一下它的基本用法:

// js部分
import { reactive } from '@vue/composition-api'
setup() {
     // 创建响应式数据对象
    const state = reactive({count: 0})
     // setup 函数中将响应式数据对象 return 出去,供 template 使用
    return state // 必须return
}
// template里面使用
<p>当前的 count 值为:{{ state.count }}</p>

我们通过 reactive包裹的对象,return 之后,就相当于 Vue 2.x 的 data() hooks。 我们可以对其进行双向绑定等操作。

ref

ref() 函数用来根据给定的值创建一个响应式的数据对象,ref() 函数调用的返回值是一个对象,这个对象上只包含一个 .value 属性:

  // js部分
   import { ref } from '@vue/composition-api'
   setup() {
       // 创建响应式数据对象 count,初始值为 0
       const count = ref(0)
       // 如果要访问 ref() 创建出来的响应式数据对象的值,必须通过 .value 属性才可以
       console.log(count.value) // 输出 0
       // 让 count 的值 +1
       count.value++
       // 再次打印 count 的值
       console.log(count.value) // 输出 1
       return {
           count,
           name: ref('zs')
       }
   }
  // template里面使用
   <template>
      <p>{{count}}-{{name}}</p>
   </template>

开始动手

初始化项目

首先我们利用 Vue Cli 脚手架 初始化我们的应用:

800126DB-4748-457C-A498-0CCB24025457.png

注意,Use class-style component syntax ? 这一项我们要选择为no, 我们不用装饰器写法,我们要用composition api 的写法

搭建项目目录

然后开始搭建我们的项目目录:

  ├── package-lock.json
  ├── package.json
  ├── public
  │   ├── favicon.ico
  │   └── index.html
  ├── src
  │   ├── App.vue
  │   ├── assets
  │   ├── components
  │   ├── main.ts
  │   ├── map
  │   ├── pages
  │   ├── plugins
  │   ├── services
  │   ├── shims-vue.d.ts
  │   └── utils
  ├── tsconfig.json
  ├── vue.config.js
  ├── yarn-error.log
  └── yarn.lock

page目录:

  ├── home
  │   └── Home.vue
  ├── line
  │   └── TrendLine.vue
  ├── map
  │   └── Map.vue
  ├── news
  │   └── News.vue
  ├── pie
  │   └── Pie.vue
  └── rumor
      └── Rumor.vue

导入 Vue-Composition-Api

yarn add @vue/composition-api  //根目录执行
// main.ts
import VueCompositionApi from '@vue/composition-api'
Vue.use(VueCompositionApi)

创建根组件

我们将Home作为根组件,我们先来定义一下这个组件:

  import { createComponent, onMounted, onUnmounted, reactive } from '@vue/composition-api'
  export default createComponent({
  name: 'Home',
  components: {
  },
  setup() {
      // 生命周期部分
      onMounted(() => {
      console.log('onMounted...')
      console.log(state)
      })
      onUnmounted(() => {
      console.log('onUnmounted...')
      })
      return {
     
      }
  }
 })

通过 createComponent函数 结合 TypeScript 提供的类型推断来进行项目的开发。

定义响应式数据

接着我们得定义一些响应的数据:

export interface HomeState {
  newsList?: []
  caseList?: []
}
// 在 setup()里面
    const origin: HomeState = {
    newsList: [],
    caseList: []
  }
  const state = reactive(origin)

异步请求

接着我们需要发起异步请求初始化数据

setup(){
  // methods
  const getRumorList = async () => {
    ....
  }
  const getTrendList = async () => {
    ....
  }
  const initData = async () => {
    ....
  }
  // 在生命周期里面调用
  onMounted(() => {
      console.log('onMounted...')
      initData()
      getRumorList()
      getTrendList()
  })
}

组件的导入及使用

假设我们要导入 News组件:

import News from '@/pages/news/News.vue'
// components
components: {
  News
},
setup(){
  .....
}
// template 中使用
<News :newlist="state.newsList" />

组件内部:

  import { createComponent } from '@vue/composition-api'
  export default createComponent({
  name: 'News',
  props: {
      newlist: Array
  }
  })

Docker部署

 # ncov-vue3 Dockerfile

  #指定node镜像对项目进行依赖安装和打包
  FROM node:10.16.0 AS builder
  # 将容器的工作目录设置为/app(当前目录,如果/app不存在,WORKDIR会创建/app文件夹)
  WORKDIR /app 
  COPY package.json /app/ 
  RUN npm config set registry "https://registry.npm.taobao.org/" \
      && npm install
  
  COPY . /app   
  RUN npm run build 

  #指定nginx配置项目,--from=builder 指的是从上一次 build 的结果中提取了编译结果(FROM node:alpine as builder),即是把刚刚打包生成的dist放进nginx中
  FROM nginx
  COPY --from=builder app/dist /usr/share/nginx/html/
  COPY --from=builder app/nginx.conf /etc/nginx/nginx.conf


  #暴露容器80端口
  EXPOSE 80

看到这里,小伙伴们基本上了解Vue3 的相关操作和基本入门,大家也操作起来吧!

最后,武汉加油⛽️

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].