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

Sử dụng nextTick trong vuejs

0 0 1

Người đăng: Thành Nguyễn Tiến

Theo Viblo Asia

Nguồn:

https://vuejs.org/api/general.html#nexttick https://www.telerik.com/blogs/understanding-vuejs-nexttick

nextTick trong vue để làm gì ?

Một trong những câu hỏi mà mọi người thường hỏi tôi khi bắt đầu vuejs là : Vue.nextTick để làm gì ? Tôi có cần sử dụng nó trong dự án của mình không ? Điều tôi trả lời là có chứ . Tôi thường xuyên sử dụng nó trong dự án vue điều đó giúp tôi giải quyết một vài vấn đề nhiều hơn một lần . Và như mọi chức năng của vuejs điều quan trọng là bạn phải thực hiểu chính xác chức năng của nó để biết chính xác khi nào sử dụng nó và khi nào không . Tôi thấy một vài dự án khi họ sử dụng nó rất nhiều nhưng không thực sự hiểu về nó điều đó làm cho code của họ trông thực sự rất phức tạp và khó hiểu hơn rất nhiều lần .

Component life cycle trong vuejs.

Có lẽ bạn đã quen thuộc trong vòng đời phát triển của vuejs :

  • beforeCreate() : lifeCycle được khởi tạo . Nó được gọi trước khi component vue được thiết lập và chưa có thuộc tính gì (data, event , properties....) được thiết lập
  • created() : chạy trước khi dom được render. Ở chu kì này data và envent đã được tạo và có thể truy cập .
  • beforeMount() : Nó sẽ thực hiện sau khi render function hoàn tất và trước khi render chính thức phần tử DOM của lớp Vue. Ở giai đoạn này các bạn chưa thể thao tác với DOM của vue .
  • mounted(): Hook này bạn có thể thao tác mọi thứ với DOM.
  • beforeUpdate(): Nơi để bạn triển khai logic trước khi thực hiện thay đổi với thành phần của bạn
  • updated(): cho phép bạn triển khai bất kì logic nào khi thực hiện thay đổi thành phần
  • beforeUnmount(): được gọi ngay trước khi huỷ bỏ component. Đây là giai đoạn thích hợp nhất để bạn xoá bỏ các data, events để dọn dẹp.
  • unmounted(): được gọi khi component đã bị xoá bỏ khỏi DOM

🧐 Bây giờ chúng ta hãy xem nextTick() sẽ rơi vào đâu trong life cycle.

nextTick là gì ?

Theo tài liệu của vuejs , nextTick() là một hàm để chờ bản cập nhật DOM tiếp theo flush. Hàm này sẽ thực hiện một lệnh gọi lại sẽ được chạy sau khi bản cập nhật của các thành phần hoàn tất. 🏁 (Bản cập nhật này xảy ra khi bạn sửa đổi thuộc tính dữ liệu hoặc computed bị thay đổi.) image.png ⚠️ Một điều quan trọng cần nhớ là Vue cập nhật DOM theo cách không đồng bộ (do đó, bất kể có bao nhiêu thay đổi trạng thái được áp dụng cho các thành phần trong quá trình cập nhật, tất cả chúng sẽ diễn ra đồng thời! ☝🏼). Chỉ khi đó, mỗi nextTick()lệnh gọi lại mới được gọi. Các lệnh gọi lại này có thể hữu ích khi bạn muốn thực thi một cái gì đó trong khi đảm bảo rằng các prop, dữ liệu hoặc computed của một thành phần con được cập nhật. Mã của bạn bị trì hoãn sau khi chu kỳ cập nhật DOM tiếp theo được chạy và sau khi trình duyệt hiển thị thay đổi đó.

Nói cách khác, lệnh gọi lại sẽ được hoãn lại để thực hiện sau chu kỳ cập nhật DOM tiếp theo.

Tại sao nên sử dụng Vue.js nextTick khi chúng ta có thể sử dụng settimeout?

Như đã đề cập trước đó, Vue cập nhật DOM theo cách không đồng bộ. 👉🏼 Vì vậy, khi bạn thực hiện thay đổi đối với DOM, nó không xảy ra ngay lập tức. 🕵🏻 Nó sẽ kiểm tra trước xem có bất kỳ thay đổi trạng thái nào khác không. CHỈ SAU ĐÓ, bạn mới thấy các thay đổi của mình được hiển thị trên trình duyệt! 🎨

Mọi chuyện xảy ra nhanh đến nỗi bạn thậm chí còn không nhìn thấy. 👀 Vậy, tại sao điều đó lại quan trọng?

👩🏻‍🏫 Điều này quan trọng vì, giả sử, bạn cần chạy một hàm ngay sau khi thay đổi đó được thực hiện. Đây là nơi bạn cần sử dụng nextTick()để chờ cập nhật DOM. Sử dụng settimeout() cũng tương tư như vậy nhưng nó sẽ không bạn sẽ không xác định được chính xác thời gian sau khi DOM xử lý không đồng bộ xong nên logic nó sẽ không clear , không hiệu quả và chạy chậm hơn . 02_settimoutvsnexttick.gif Thế còn watch() ? Tại sao chúng ta không sử dụng watch() để lắng nghe thay đổi ? Câu trả lời là watch() chỉ thực thi khi một dữ liệu thành phần thay đổi , trong khi nextTick sử dụng sau khi ứng dụng được cập nhật .

Cách sử dụng Vue.js nextTick

Có 2 cách để sử dụng vue.js nextTick: 🛠

  1. Với một callback function : image.png
  2. Với 1 promise or Async/Await : image.png image.png

Kết luận

Thật vậy, trong các cơ sở mã nhỏ, chúng ta hiếm khi cần nextTick(). Tuy nhiên, nó vẫn có những lợi thế đáng kể, đặc biệt là nếu bạn tình cờ thực hiện các lệnh gọi API 🤙🏼 và cần chạy một số logic 🧠 sau khi nhận dữ liệu từ nền.

Mặt khác, 🤓 điều quan trọng là phải suy nghĩ về logic của ứng dụng. Nếu bạn sử dụng $nextTickquá thường xuyên, 🤭 bạn có thể làm phức tạp cơ sở mã của ứng dụng.

Bình luận

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

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

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 522

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

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 432

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

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 153

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

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 141

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

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 110

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

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 244