vue3-component-base

10,707 1
Install
npm install vue3-component-base
Latest Version:0.0.9
Vue:3
License:MIT
Last Updated:Oct 8, 2023
Links: GitHub  ·  npm
Maintainer: zhangsongcui

VueComponentBase

For Vue 3.

Functional difference from v2

  • Default prop value with field init syntax won't work, use prop option instead.
// @Prop() readonly prop = 'default prop'; // Doesn't work
@Prop({ default: 'default prop' }) prop: string; // Works
  • For @Ref that maps an array ( i.e. ref used in v-for ), declare ref="xxx" in template as :ref="x => xxxRefFn(index, x)"
@Ref() divs: HTMLDivElement[];
<div v-for="(item, index) of [1, 2, 3]"
     :key="item"
     :ref="x => divsRefFn(index, x)"></div>
  • Lifecycle hook beforeDestroy and destroyed are deprecated to follow the change of Vue 3, but they are still supported and are treated as the alias of beforeUnmount and unmounted.

All other functions stay the same.

Usage

import { Component, VueComponentBase } from 'vue-component-base';

@Component() // Parens are required
export default class MyComponent extends VueComponentBase { // NOT `extends Vue`. Note `extends MyBaseComponent` works
  @Prop({ default: 'default prop' }) readonly prop: string; // https://github.com/kaorun343/vue-property-decorator#Prop

  @Ref() readonly div: HTMLDivElement; // $refs.div

  @Inject() inject readonly: Something; // inject

  foo = ''; // Normal property
  arrowFn = () => this.foo = 456; // Arrow function property

  undefinedValue = undefined; // Different from https://github.com/vuejs/vue-class-component#undefined-will-not-be-reactive, this is reactive

  undefinedValue2; // This is NOT reactive, TypeScript won't generate code for fields that have no init value. ( while babel and the standard do )

  @Inreactive // It's not reactive, useful for constant values
  readonly MY_CONSTANT = 'some constants';

  setup(props: Record<string, any>, ctx: SetupContext) {} // setup function, you cannot use this in it

  mounted() {} // Lifecycle hook with intellisense

  doSomeAction() {} // Normal method

  @Hook('mounted') // Another Lifecycle hook
  fetchData() {} // Accepted as a normal method too

  @Watch('field') // https://github.com/kaorun343/vue-property-decorator#-watchpath-string-options-watchoptions---decorator
  onFieldChange(val: string, oldVal: string) {}

  get computedVar() { // Computed properties
    return 'field: ' + this.field;
  }
}

License

MIT

Related Packages

vue-class-migrator

CLI tool to help migrating vue class components to vue 3 compatible components.

2,840 71
vue-class-component

ES201X/TypeScript class decorator for Vue components

17,169,260 5,745
pinia-class-component

ECMAScript / TypeScript decorator for class-style Pinia store.

47,479 39
@havunen/vue2-class-component

ES201X/TypeScript class decorator for Vue components

450 5,745
vuex-class-modules

Typescript class decorators for class-style vuex modules.

160,633 192

Version History

Version Released Vue License
0.0.9 ^3.2.26 MIT
0.0.8 ^3.2.6 MIT
0.0.7 ^3.2.4 MIT
0.0.6 ^3.0.9 MIT
0.0.5 ^3.0.0 MIT