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

Phân biệt giữa AsyncData và Fetch trong Nuxtjs

0 0 234

Người đăng: Dương Quý Cao

Theo Viblo Asia

Mở đầu

Khi làm việc với nuxtJS bạn sẽ đụng tới hai khái niệm này là fetchasyncData. Hai phương thức này giống nhau về cách sử dụng đó là cho phép xử lý dự kiện bất đồng bộ và nhận kết quả trả về và có một tham số đầu vào là context (trong context có lưu trữ các biến store, params, isDev,…). Khác nhau của hai phương thức nào là mục đích sử dụng. Cả fetchasyncData đều được gọi một lần duy nhất (lần đầu tiên khi request trực tiếp đến server) và được gọi mổi lần ở client khi chuyển tới page tương ứng.

Fetch

Mục đích là lấy dữ liệu từ api và cập nhập vào lại trong store của ứng dụng, từ đó mới lấy dữ liệu từ store ra dùng, hàm này không trả về dữ liệu.

export default { async fetch (context) { await context.$store.dispatch('actions');
}

Một số lưu ý như sau:

  1. Khi gọi API hoặc gội actions trong fetch thì đều phải xử lý bất đồng bộ async / await.
  2. Fetch có thể sử dụng ở cả page component và các components.
  3. Có sử dụng this và có thể nhận context truyền vào.
  4. Fetch gọi ở server-side một lần và mọi lúc ở client-side khi route thay đổi.

AsyncData

Cũng lấy dữ liệu từ api, nhưng không cập nhật vào store, mà hàm này trả về là object, giá trị của object này sẽ được sử dụng trong component luôn không cập nhật trong store và giá trị này sẽ được merge với giá trị ban đầu mà bạn khai báo trong thuộc tính data. asyncData thường được gọi nếu bạn chỉ muốn lấy dữ liệu từ server và hiển thị ra component luôn, không lưu trữ lại trong store.

export default { asyncData (context) { return await context.$store.dispatch('actions'); }
}

Một số lưu ý như sau:

  1. Khi gọi API hoặc gội actions trong asyncData thì đều phải xử lý bất đồng bộ async / await.
  2. AsyncData chỉ có thể được sử dụng trong các page component.
  3. AsyncData được gọi trước fetch và được gọi một lần ở phía server-side và mỗi lần trước khi router được thay đổi ở phía client-side.
  4. AsyncData lấy context làm đối số đầu tiên và không có quyền truy cập bằng this của component instance

Như vậy qua bài viết này mình cũng đã tìm hiểu được sự giống nhau cũng như khác nhau giữa hai phương thức fetch và asyncData. Khi nào nên sử dụng phương thức nào. Mong sẽ giúp ích được cho các bạn ít nhiều, cảm ơn các bạn đã đọc bài viết của mình!

Tài liệu tham khảo:

  1. https://medium.com/@nestsera/nuxtjs-lifecycle-8a822af2c5a8
  2. https://nuxtjs.org/blog/understanding-how-fetch-works-in-nuxt-2-12/
  3. https://morioh.com/p/289c1f5b44ee

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 140

- 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 125

- 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 103

- 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 201

- 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 87

- 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 49