Trong một ứng dụng nói chung, ứng dụng Vue nói riêng, việc các thành phần phải sử dụng trạng thái chung là điều khó tránh khỏi. Để thực hiện điều đó, bạn sẽ phải truyền biến đó qua lại giữa các thành phần. This job doing for source code back up lộn ngược, khó đọc. Đây là lúc bạn nghĩ đến việc sử dụng Vuex để quản lý Nhà nước
Mình lấy một điển hình cho bạn dễ hình dung. Ứng dụng có tính năng đăng nhập, do vậy trạng thái [trạng thái] người dùng đã đăng nhập/đăng xuất sẽ được sử dụng ở mọi thành phần trong ứng dụng. Thay vì bang này được truyền thông “tùm ùm” mỗi khi cần đến, bạn sẽ quản lý bang đó ở một nơi duy nhất. Tất cả các thành phần nếu cần thì vào đó mà lấy
Có một thư viện chuyên quản lý trạng thái đó là Vuex. Bài viết này chúng ta cùng nhau tìm hiểu cách sử dụng Vuex để quản lý trạng thái trong ứng dụng VueJS nhé
Nội dung chính của bài viết
- Vuex là gì?
- Cài đặt Vuex
- Sử dụng Vuex để khởi tạo Store
- chỉ mục cửa hàng
- mô-đun
- 1. mục lục. js
- 2. đột biến. js
- 3. hành động. js
- 4. người thu thập. js
- Cách sử dụng Store trong một thành phần
- Các thành phần
- Hình thức sản phẩm. vue
- danh sách sản phẩm. vue
- trong danh sách chứng khoán. vue
- Sản phẩm demo
- pause
Vuex là gì?
Vuex là thư viện chuyên quản lý State cho ứng dụng VueJS. Nếu bạn đã từng làm việc với React thì có lẽ Vuex cũng có chức năng tương tự như Redux
Vuex sẽ lưu tất cả Trạng thái của ứng dụng vào một nơi gọi là Cửa hàng
Khi sử dụng Vuex, mọi thành phần sẽ sử dụng cùng một trạng thái. Nếu không, mỗi thành phần sẽ có một phiên bản riêng của Trạng thái đó
Phần tiếp theo của bài viết, mình sẽ hướng dẫn
- Cách cài đặt Vuex store
- Cách sử dụng Cửa hàng này trong các Thành phần
Chúng ta sẽ bắt đầu bằng cách khởi tạo dự án Vue mới. Đọc lại cách tạo dự án Vue
Cài đặt Vuex
Cách cài đặt Vuex cũng tương tự như mọi mô-đun khác thôi
npm install vuex --save
hoặc
yarn add vuex
Sử dụng Vuex để khởi tạo Store
Một cửa hàng có thể có nhiều mô-đun và để cấu trúc mã nguồn dự án đỡ lộn xộn, mình sẽ tạo riêng một thư mục
yarn add vuex0 bên trong thư mục
yarn add vuex1
Tiếp tục tạo một thư mục “
yarn add vuex2” bên trong cửa hàng. Cuối cùng là tạo tệp
yarn add vuex3 bên trong thư mục
yarn add vuex0. Kết quả sẽ có cây thư mục như hình dưới đây
chỉ mục cửa hàng
Giả sử chúng ta có mô-đun là sản phẩm, nơi chứa trạng thái của các sản phẩm. Vì vậy, trong
yarn add vuex3, chúng ta sẽ cần khai báo để nhập các cửa hàng mô-đun được sử dụng________số 8
mô-đun
Tất cả Trạng thái của ứng dụng Vue sẽ được lưu trong một đối tượng. Các đối tượng này sẽ mọc ra khi ứng dụng ngày càng phức tạp hơn
May mắn là Vuex cho phép bạn chia nhỏ store thành nhiều module. Mỗi mô-đun sẽ độc lập với nhau và có đầy đủ 4 thành phần. trạng thái, getters, hành động và đột biến
Vì vậy, khi bạn tạo một mô-đun mới, bạn cần tạo các tệp sau
yarn add vuex
3yarn add vuex
7yarn add vuex
8yarn add vuex
9
Mình sẽ giải thích và cùng thực hiện việc viết code chi tiết cho từng file một
1. mục lục. js
yarn add vuex3 là nơi mình định nghĩa trạng thái của các mô-đun. Hơn nữa, tệp này sẽ đóng gói getters, action, mutants thành một đối tượng đại diện cho trạng thái đó
Mặc định, mọi thứ bên trong một mô-đun sẽ được đăng ký hoạt động cho phạm vi toàn dự án [toàn cầu]. Điều này cho phép nhiều mô-đun có thể phản ứng với cùng một đột biến hoặc hành động
Tuy nhiên, mình không thích cách mặc định này, mình thích các mô-đun nên đóng kín và hoạt động riêng rẽ thay vì toàn cầu. To do this thing mình đặt đơn giản
import Vue from 'vue'; import Vuex from 'vuex'; import {products} from './modules/products'; Vue.use[Vuex]; export const store = new Vuex.Store[{ modules: { products, } }];1 trong các mô-đun
yarn add vuex5
Như bạn có thể thấy ở đoạn mã trên, Trạng thái chỉ là một đối tượng với các thuộc tính là các mô-đun
Trạng thái đơn giản chỉ là một đối tượng được chia sẻ trong toàn bộ ứng dụng. vntalking
2. đột biến. js
Như cái tên của nó,
yarn add vuex9 sẽ chứa tất cả các đột biến hàm
Theo định nghĩa, Mutations is used functions to change the value of state
Trong Vuejs, Mutation là cách duy nhất để thay đổi trạng thái của bạn và bắt buộc phải thực hiện đồng bộ
Trong Vuex, tham số đầu tiên của đột biến hàm luôn là trạng thái đối tượng
yarn add vuex7
3. hành động. js
Tệp
yarn add vuex8 chứa tất cả các hành động của hàm. Các thao tác hàm gần giống với đột biến hàm, nhưng chúng không làm thay đổi trạng thái. Đặc biệt, các thao tác hàm có thể thực hiện bất đồng bộ [không đồng bộ]
yarn add vuex9
Trong ví dụ trên, chúng ta có hai hành động, cả hai hành động này đều cam kết đột biến. Trong đó, mình có minh họa cả hai kiểu. action function run set [hàm
import Vue from 'vue'; import Vuex from 'vuex'; import {products} from './modules/products'; Vue.use[Vuex]; export const store = new Vuex.Store[{ modules: { products, } }];4] and run not dong set [hàm
import Vue from 'vue'; import Vuex from 'vuex'; import {products} from './modules/products'; Vue.use[Vuex]; export const store = new Vuex.Store[{ modules: { products, } }];5]
4. người thu thập. js
Tệp
yarn add vuex7 chứa tất cả các hàm getter. Hàm getter là nơi lưu trữ tính toán các thuộc tính của thành phần
Hàm Getter có quyền truy cập vào trạng thái thông qua tham số đầu tiên
Cách sử dụng Store trong một thành phần
Trước khi có thể sử dụng cửa hàng bên trong các thành phần, chúng ta cần đưa vào tất cả thành phần con từ thành phần gốc. Chúng ta thực hiện điều này trong
import Vue from 'vue'; import Vuex from 'vuex'; import {products} from './modules/products'; Vue.use[Vuex]; export const store = new Vuex.Store[{ modules: { products, } }];7, nơi mà ví dụ Vue được tạo ra
yarn add vuex4
Các thành phần
Để minh họa cho cách sử dụng cửa hàng trong thành phần, mình sẽ tạo 3 thành phần trong thư mục “thành phần”
import Vue from 'vue'; import Vuex from 'vuex'; import {products} from './modules/products'; Vue.use[Vuex]; export const store = new Vuex.Store[{ modules: { products, } }];
8import Vue from 'vue'; import Vuex from 'vuex'; import {products} from './modules/products'; Vue.use[Vuex]; export const store = new Vuex.Store[{ modules: { products, } }];
9yarn add vuex
50
Hình thức sản phẩm. vue
Thành phần sẽ có biểu mẫu để gửi hành động đến cửa hàng, mục đích là thêm sản phẩm khi người dùng nhấn nút “lưu”
Vì chúng ta đã bật không gian tên trong mô-đun, nên tại đây, các thao tác hàm cũng phải có tên với tiền tố [tiền tố] trùng với tên của mô-đun
yarn add vuex8
danh sách sản phẩm. vue
ProductList component will display all products, both in stock or not in stock
Lưu ý rằng. biến sản phẩm được lấy giá trị từ đối tượng trạng thái, chúng ta sẽ sử dụng trình trợ giúp mapState cho công việc này. mapState helper sẽ tự động tạo ra hàm getter đã được tính toán cho chúng ta
Do chúng ta đã bật namespace cho module, nên cần chuyển tên module vào tham số đầu tiên, tham số thứ hai là danh sách các thuộc tính mà chúng ta muốn tạo cho getter function
Đọc thêm. “…” được gọi là toán tử trải rộng. Bạn có thể đọc thêm tại đây
yarn add vuex9
trong danh sách chứng khoán. vue
Cũng giống như thành phần ProductList, thành phần này chỉ hiển thị các sản phẩm. Chỉ khác là nó chỉ hiển thị các sản phẩm nằm trong danh mục Chứng khoán
Để làm được điều này, thành phần này gọi hàm trong Stock getter trong cửa hàng, nơi mà mình đã áp dụng công việc lọc sản phẩm
yarn add vuex0
Sản phẩm demo
Về cơ bản chúng ta đã code xong, các bạn có thể chạy thử và thu được kết quả. Mình đã tạo sẵn code chạy online tại đây
pause
Như vậy, chúng ta cùng nhau tìm hiểu cách sử dụng Vuex để quản lý trạng thái của ứng dụng. Mình hi vọng bài viết sẽ giúp bạn hiểu và có thể làm việc ngon lành với Vuex
Ngoài ra, sử dụng Vuex còn là một trong 3 cách truyền dữ liệu giữa các thành phần, bạn có thể tham khảo thêm bài viết này. 3 cách truyền dữ liệu trong Vue
Xin vui lòng để lại bình luận nếu có bất kỳ thắc mắc, câu hỏi hay muốn mình viết thêm bất kỳ chủ đề liên quan đến Vue
Miễn phí khóa học React Native
Bạn có muốn tải xuống toàn bộ video của khóa học rất nổi tiếng về React Native này không?
- THẺ
- jav
- setting front-end user
- tự học lập trình front-end
- vuejs
liên kết
Bài trước “Lỗi chính tả” cũng là một chiến lược ASO hay
Bài tiếp theo Javascript là gì?
sơn dương
Tên đầy đủ là Dương Anh Sơn. Tốt nghiệp ĐH Bách Khoa Hà Nội. Mình bắt đầu nghiệp coder khi mà ra trường đúng là xin được làm đúng chuyên ngành. Mình tin rằng chỉ có chia sẻ kiến thức mới là cách học tập nhanh nhất. Các bạn góp ý bài viết của mình bằng cách comment bên dưới nhé