Ứng dụng toán tử trải rộng trong JavaScript với Vue và RuoYi

Toán tử trải rộng (Spread Operator) — ký hiệu bằng ba dấu chấm ... — là một tính năng mạnh mẽ trong JavaScript, cho phép giải nén các cấu trúc lặp được (như mảng, chuỗi, hoặc đối tượng) thành các phần tử riêng biệt. Trong các dự án sử dụng framework Vue kết hợp hệ thống quản trị RuoYi, toán tử này thường xuất hiện khi xử lý tham số API, sao chép trạng thái, hoặc truyền dữ liệu linh hoạt giữa các lớp.

1. Giải nén mảng thành danh sách giá trị

Khi cần truyền từng phần tử của mảng vào hàm hoặc tạo mảng mới, toán tử trải rộng giúp loại bỏ vòng lặp thủ công:

const digits = [7, 8, 9];
const sequence = [0, 1, ...digits, 10];
console.log(sequence); // [0, 1, 7, 8, 9, 10]

2. Kết hợp nhiều tập dữ liệu

Thay vì dùng concat(), bạn có thể ghép mảng một cách trực quan và không làm thay đổi mảng gốc:

const base = ['alpha', 'beta'];
const extras = ['gamma', 'delta'];
const fullList = [...base, 'epsilon', ...extras];

3. Sao chép nông đối tượng

Trong ngữ cảnh Vue, việc tránh tham chiếu trực tiếp đến this.queryParams là thiết yếu để đảm bảo tính bất biến (immutability). Toán tử trải rộng cung cấp cách sao chép nhanh mà không cần thư viện hỗ trợ:

const filterConfig = {
  status: 'active',
  category: 'service',
  priority: 'high'
};

const requestPayload = { ...filterConfig, timestamp: Date.now() }; 
// Tạo đối tượng mới, không ảnh hưởng đến filterConfig

4. Truyền tham số hàm động

Khi gọi hàm nhận nhiều tham số riêng lẻ nhưng dữ liệu lại nằm trong mảng, trải rộng giúp chuyển đổi liền mạch:

const calculateTotal = (a, b, c, d) => a + b + c + d;
const values = [10, 20, 30, 40];
console.log(calculateTotal(...values)); // 100

5. Trường hợp thực tế trong RuoYi

Trong module xuất dữ liệu Excel, đoạn mã sau minh họa cách triển khai toán tử trải rộng để đóng gói tham số truy vấn:

this.download(
  'work/contract/export',
  { ...this.queryParams },
  `export_contract_${Date.now()}.xlsx`
);

Giả sử this.queryParams có nội dung:

{
  startDate: '2024-03-01',
  endDate: '2024-09-30',
  departmentId: 205,
  type: 'signed',
  keyword: 'maintenance'
}

Khi viết { ...this.queryParams }, JavaScript sẽ tạo một đối tượng hoàn toàn mới chứa cùng tập thuộc tính — điều này ngăn chặn khả năng sửa đổi gián tiếp this.queryParams trong quá trình gửi yêu cầu. Đồng thời, nếu sau này thêm trường mới vào queryParams, hàm download tự động bao gồm nó mà không cần cập nhật thủ công từng khóa.

So sánh với cách viết tường minh:

this.download(
  'work/contract/export',
  {
    startDate: this.queryParams.startDate,
    endDate: this.queryParams.endDate,
    departmentId: this.queryParams.departmentId,
    type: this.queryParams.type,
    keyword: this.queryParams.keyword
  },
  `export_contract_${Date.now()}.xlsx`
);

Cách dùng ... không chỉ giảm độ dài mã nguồn mà còn nâng cao khả năng mở rộng và giảm thiểu lỗi do thiếu trường khi cấu trúc queryParams thay đổi.

Thẻ: JavaScript spread-operator vuejs ruoyi es6

Đăng vào ngày 20 tháng 5 lúc 12:24