2021.04.06
VueJS là gì?
Nếu là một lập trình viên hoặc hoạt động trong lĩnh vực kỹ thuật hầu như ai trong chúng ta đều biết, các framework js đang lên ngôi và gần như là “hot trend” trong xu hướng kỹ thuật tại thời điểm hiện tại. Các bạn đã từng đặt ra câu hỏi, tại sao lại có xu hướng như vậy, framework js có điểm gì đặc biệt? Chúng ta hãy cùng nhau tìm hiểu ở nội dung bài viết này nhé.
Server-side rendering và Client-side rendering:
Server-side rendering:
- Khi người dùng truy cập vào trang web trên trình duyệt, nó sẽ gửi một yêu cầu (request) đến server để yêu cầu xử lý tác vụ của người dùng (hiển thị một trang nào đó, khởi tạo một cái gì đó…).
- Tiếp theo, server sau khi nhận được yêu cầu sẽ thực hiện một chuỗi các xử lý logic và lấy dữ liệu.
- Cuối cùng, server sẽ thực hiện render ra thành HTML để trả về cho trình duyệt hiển thị kết quả cho người dùng.
Vậy vấn đề của cơ chế này là gì? Khi server phải xử lý quá nhiều logic cho nhiều người dùng khác nhau thì sự quá tải là việc không thể tránh khỏi. Ngoài ra, việc refesh và load lại nhiều lần khi thực hiện các tác vụ như chuyển trang, submit một form nào đó sẽ tạo ra sự khó chịu cho người sử dụng. Băng thông sử dụng khi trả về mã HTML sẽ rất lớn.
Client-side rendering:
Việc ra đời của cơ chế client-side rendering và SPA (Single Page Application) đã giải quyết được vấn đề giảm tải cho máy chủ server, giảm lượng băng thông sử dụng vì server chỉ trả về kiểu dữ liệu json hoặc xml. Ngoài ra, vì không cần phải load lại trang khi thực hiện các tác vụ sẽ đem lại một trải nghiệm tốt hơn cho người dùng.
VueJs
Tích hợp vào dự án
- Ta chỉ cần thêm một đoạn mã nhúng một gói CDN (Content Delivery Network – mạng phân phối nội dung) vào source code của mình.
<script src="https://unpkg.com/vue@next"></script>
2. Nếu bạn không muốn sử dụng CDN vì một số lý do nào đó (đường truyền không ổn định, …) bạn có thể download các file có extension .js về trên máy chủ và thêm nó vào bằng thẻ “script” tương tự với CDN.
<script src="link-to-js-file"></script>
npm install vue@next
yarn global add @vue/cli # OR npm install -g @vue/cli
Cấu trúc thư mục
- public: là thư mục chứa file index.html của chúng ta, đây là file chính để webserver có thể truy cập vào source code.
- src: là thư mục chứa các phần liên quan đến xử lý logic, các resources.
– components: đây là thư mục mà ta sẽ chứa các component (thành phần) trên ứng dụng của chúng ta.
– assets: là thư mục chứa các file tĩnh (static) như các file hình ảnh.
– App.vue: đây là Component chính của chúng ta (hay còn được gọi là main component), có thể xem là component được truy cập đầu tiên khi ta vào một SPA.
– main.js: đây là file js mà Vue dùng để load đầu tiên nhất. Trong file này sẽ có phần khởi tạo một Vue Application và config cho Vue Application. Ngoài ra, ta có thể viết các đoạn mã mà ta muốn load đầu tiên, thậm chí là trước khi Vue Application được khởi tạo. Ví dụ như load các thư viện của bên thứ 3, kiểm tra trạng thái nào đó để xử lý.
- dist: đây là thư mục chứa source code sau khi thực hiện build các đoạn mã VueJS thành Javascript thuần, tắt đi các cảnh báo (warning) hay bất cứ chế độ debug để phục vụ cho việc triển khai sản phẩm một cách chỉn chu nhất.
- vue.config.js: đây là file dùng để config một số option tuỳ chọn trong quá trình phát triển ứng dụng. Các bạn có thể tham khảo thêm ở [đây]
Khởi tạo một Component
<template> <div>Your Name is: {{ display }}</div> </template> <script> export default { name: "PrintName", props: ['name'], computed: { display: function () { let name = this.name.toLowerCase(); return name.charAt(0).toUpperCase() + name.slice(1); } } } </script> <style scoped> </style>
<template> <div id="app"> <div class="form"> <input type="text" v-model="name"> </div> <div class="display"> <!-- sử dụng component--> <PrintName :name="name" /> </div> </div> </template> <script> import PrintName from "@/components/PrintName"; export default { name: 'App', data: function() { return { // khai báo biến name name: '', } }, components: { // khai báo component PrintName } } </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>