- vừa được xem lúc

Vue Class Component Và Những Điều Cần Biết Về Nó !

0 0 76

Người đăng: Huynh Quang Nam

Theo Viblo Asia

Hẳn anh em nếu ai đã làm nhiều với vue thì không xa lạ gì với functional component. Vậy còn việc xây dựng vue component theo kiểu class component anh em đã làm với nó bao giờ chưa? Nó được biết đến là một thư viện cho phép anh em tạo các component theo cú pháp class-style.

Hôm nay mình sẽ giới thiệu chi tiết đến anh em Vue Class Component, đừng bỏ qua nhé!

1. Tổng Quan.

  • Đây là một package của Vue cho phép anh em định nghĩa các method một cách đơn giản hơn rất nhiều so với cách sử dụng Vue bình thường.

  • Ta có thể cài đặt nó bằng npm hoăc yarn:

    npm install --save vue vue-class-component
    
    yarn add --save vue vue-class-component
    
  • Để sử dụng Vue Class Component, ta cần định cấu hình TypeScript hoặc Babel trong project.

? Cùng đi vào tìm hiểu sự khác biệt nào ....

2. So Sánh.

<template> <div> <p>Title: {{ title }}</p> <button @click="changeName">Get New Title</button> <button @click="decrement">-</button> {{ count }} <button @click="increment">+</button> </div>
</template> <script>
import Vue from 'vue';
import Component from 'vue-class-component'; @Component
export default class Counter extends Vue { count = 0; name1 = 'Vue'; name2 = 'Class-Component'; increment() { this.count++; } decrement() { this.count--; } get title() { return `${this.name1} ${this.name2}`; } set title(name) { this.name1 = name.split(' ')[0]; this.name2 = name.split(' ')[1]; } changeName() { this.title = 'Vue Functional-Component'; }
}
</script>

?? Nhìn code trên mọi người có thấy tò mò vì methods, data... khai báo ở đâu rồi không ?

  • Methods được khai báo trực tiếp trong class không còn cần phải thông qua property methods: {}.

    Cách triển khai Vue Functional Component.

    methods: { increment: function () { this.count++; }, decrement: function() { this.count--; } }
    
  • Các dữ liệu khởi tạo được định nghĩa như một thuộc tính của class không cần phải thông qua property method data().

    Cách triển khai Vue Functional Component.

    data() { return{ count: 0; name1: "Vue"; name2: "Class-Component"; }
    },
    
  • data, render và tất cả các hook trong vòng đời Vue cũng có thể được khai báo trực tiếp dưới dạng các phương thức nguyên mẫu của lớp, nhưng anh em không thể gọi chúng trên chính instance. Khi khai báo các phương thức tùy chỉnh, anh em nên tránh các tên dành riêng này.

    import Vue from 'vue'
    import Component from 'vue-class-component' @Component
    export default class HelloWorld extends Vue { // Declare mounted lifecycle hook mounted() { console.log('mounted') } // Declare render function render() { return <div>Hello World!</div> }
    }
    
  • Và cái get với set này là gì ?.

    get title() { return `${this.name1} ${this.name2}`
    } set title(name) { this.name1 = name.split(' ')[0]; this.name2 = name.split(' ')[1];
    }
    

    Anh em nếu làm nhiều với Computed thì cũng đã dùng qua Getter và Setter của computed, trong vue-class-component thì get với set cũng làm việc tương tự như vậy.

  • À tí nữa mình quên nói về Prop truyền như thế nào trong này... cách truyền siêu ngầu lòi lun nhé!

    ? Anh em phải cài thêm cái này nhé.

    npm i -S vue-property-decorator
    

    Cách triển khai nó thực sự trông rất nguy hiểm...

    import { Vue, Component, Prop } from 'vue-property-decorator' @Component
    export default class YourComponent extends Vue { @Prop(Number) readonly propA: number | undefined @Prop({ default: 'default value' }) readonly propB!: string @Prop([String, Boolean]) readonly propC: string | boolean | undefined
    }
    

    Cách triển khai cũ:

    export default { props: { propA: { type: Number, }, propB: { default: 'default value', }, propC: { type: [String, Boolean], }, },
    }
    

    ? Trông có vẻ cách triển khai của class-component tiết kiệm dòng hơn anh em nhỉ...

  • Watch trong vue class component thì sẽ như nào.

    @Watch(path: string, options: WatchOptions = {})
    
  • Watch sẽ có 2 đối số truyền vào, đối số đầu tiên là tên biến cần watch giá trị và đối số thứ 2 là object chứa các option.

    import { Vue, Component, Watch } from 'vue-property-decorator' @Component
    export default class YourComponent extends Vue { @Watch('child') onChildChanged(val: string, oldVal: string) {} @Watch('person', { immediate: true, deep: true }) onPersonChanged1(val: Person, oldVal: Person) {} @Watch('person') onPersonChanged2(val: Person, oldVal: Person) {}
    }
    

    Cách triển khai cũ trước đây.

    export default { watch: { child: [ { handler: 'onChildChanged', immediate: false, deep: false, }, ], person: [ { handler: 'onPersonChanged1', immediate: true, deep: true, }, { handler: 'onPersonChanged2', immediate: false, deep: false, }, ], }, methods: { onChildChanged(val, oldVal) {}, onPersonChanged1(val, oldVal) {}, onPersonChanged2(val, oldVal) {}, },
    }
    

Và còn nhiều property khác anh em muốn tìm hiểu thì link đây nhé!

3. Kết Luận.

Bên trên là các so sánh và những điều cần biết về vue-class-component.

Có thể nhiều anh em đã biết, cũng có thể chưa và đây cũng chỉ là so sánh mà cá nhân mình rút ra từ việc mình tiếp xúc với vue-class-component.

Nếu anh em muốn tìm hiểu nhiều hơn thì link bên dưới nhé. Cảm ơn anh em đã theo dõi bài viết. ?

https://class-component.vuejs.org/

https://www.digitalocean.com/community/tutorials/vuejs-typescript-class-components

Bình luận

Bài viết tương tự

- vừa được xem lúc

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 163

- vừa được xem lúc

Bài 1: Cài đặt Vue và chạy chương trình Hello world đầu tiên

Ở bài đầu tiên này mình sẽ hướng dẫn các bài cài đặt VueJS vào project Laravel, sau đó chúng ta sẽ cùng xem những thứ cơ bản của Vue nhé. Vì Laravel đã hỗ trợ tích hợp VueJS nên việc cài đặt của chúng ta sẽ hết sức đơn giản.

0 0 138

- vừa được xem lúc

Lazy loading and code splitting in Vue.js

Việc giữ cho ứng dụng của bạn tải nhanh ngày càng khó hơn. Trong loạt bài này, tôi sẽ đi sâu vào các kỹ thuật tối ưu hiệu suất Vue và bạn có thể sử dụng trong các ứng dụng Vue.

0 0 115

- vừa được xem lúc

Validating Vue.js Forms Using Vuelidate

Introduction. Validate thông tin đầu vào trên các ứng dụng web là rất quan trọng.

0 0 217

- vừa được xem lúc

5 Good Practices mình đang sử dụng trong Vuejs

Mở đầu. Mình đã sử dụng vuejs được cũng được 1 năm trở lại đây.

0 0 101

- vừa được xem lúc

[P5] VueJS - Một vài Interpolations khác trong Vue

Ở bài viết trước, mình đã nói về một vài keyword trong Vue như v-if, v-else, v-show, v-for, ... Chúng thực chất là các syntax đặc biệt của Vue để thao tác linh hoạt với các DOM ảo, được gọi là Interpolations. Ngoài ra, Vue còn các Interpolations khác. Mục đích của nó thì đã quá rõ ràng, hiển thị tex

0 0 61