Si bien Vue 3 a煤n no se lanz贸 oficialmente, y la producci贸n es principalmente la versi贸n 2, quiero hablar sobre la mecanograf铆a y c贸mo a煤n no es perfecta en Vue. Y hoy intentaremos crear una aplicaci贸n ideal con mecanograf铆a, centr谩ndonos en el estilo del c贸digo, promocionando la gu铆a de estilo vue y otras cosas generalmente insignificantes que fueron inventadas por personas inteligentes.
Observaci贸n
Debe tenerse en cuenta que el autor est谩 escribiendo su primera publicaci贸n y le gustar铆a recibir comentarios en los comentarios.
驴Por qu茅 "perfecto"?
-, , (eslint) , conventional commits, . , , , ( )? , - .
Vue?
2 typescript (store), , store , . , , ? vue-property-decorator vuex-smart-module .
, vue cli .
vue create habratest
- vue2, features, Vue Router History Mode, Vue Class Components, . , .
" " .
, node_modules
eslint
. extends - eslint - Vue style guide - - recommended.
extends: [ 'plugin:vue/recommended', '@vue/typescript/recommended' ],
, eslint style guide , , - .
eslint
"semi": [2, "never"],
"quotes": [2, "single", { "avoidEscape": true }]
"" Vuex
npm install vuex-smart-module
vue-property-decorator, class-style components;
.
src/main.ts store . this.$store
, .
store modules habrModule, : index.ts, actions.ts, getters.ts, mutations.ts, state.ts.
, - . ()
(!) , - , appSettings
src/store/modules/habrModule/state.ts:
export default class HabrState {
value = 'hello';
}
src/store/modules/habrModule/getters.ts:
import { Getters } from 'vuex-smart-module'
import HabrState from './state'
export default class HabrGetters extends Getters<HabrState> {
/**
* greeting, Vuex
* @param name
* @example module.getters.greeting("Habr!")
*/
greeting(name: string): string {
return this.state.value + ', ' + name
}
/**
* greeting, Vuex
* @example module.getters.greetingDefault
*/
get greetingDefault(): string {
return this.getters.greeting('Habr!')
}
}
src/store/modules/habrModule/index.ts:
import { Module } from 'vuex-smart-module'
import getters from './getters'
import state from './state'
const habr = new Module({
state: state,
getters: getters,
})
export default habr
, . store
src/store/index.ts
import Vue from 'vue'
import Vuex from 'vuex'
import { Module, createStore } from 'vuex-smart-module'
import habr from './modules/habrModule'
Vue.use(Vuex)
const root = new Module({
modules: {
habr,
},
})
const store = createStore(root)
export default store
export const habrModule = habr.context(store)
- . .
<template>
<div class="home">
<img
alt="Vue logo"
src="../assets/logo.png"
>
<HelloComponent msg="Welcome to Your Vue.js + TypeScript App" />
{{ computedTest }}
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import { habrModule } from '@/store'
@Component({
name: 'HomeView',
components: {
HelloComponent: () => import('@/components/HelloComponent.vue'),
},
})
export default class HomeView extends Vue {
get computedTest() {
return habrModule.getters.greetingDefault
}
}
</script>
! ...
src/views HomeView.vue AboutView.vue, src/components HelloComponent.vue.
name
.
src/router/index.ts HomeView.vue - , vue style guide.
.
npm run lint
.
.
, Vue, , :
Component-naming - Vue , eslint.
, - c The,
TheNavigationComponent.vue
- , .
views/components: - View, - Component ( The), - (Navigation.vue - ALERT!), html ( ).
:
<MyComponent />
vs<my-component />
Vue , CamelCase ( - ide).
- , .
- , (
Components: () => import(path)
), webpack 90% , 10% - , . , .
( , ).
( ).
api - store, Vue .
eslint , style guide ! :)
Espero que les haya gustado, la calidad del c贸digo y el estilo de la gu铆a es interesante, y adem谩s genera discusiones productivas en equipos, discuten este tipo de cosas, traer谩 satisfacci贸n y en ocasiones elevar谩 la autoestima. 隆Pero no negativo!
Github de la aplicaci贸n resultante: github
Adem谩s, todo esto funcionar谩 con modificaciones menores para ejecutar en Vue 3, lo hice, pero como no estoy completamente seguro y lo resolv铆, un art铆culo sobre el Vue 2 saliente.
PD
Estar铆a encantado de recibir comentarios detallados.
驴Le interesar铆a leer algo como esto para probar aplicaciones Vue "perfectas"?