快速筆記:使用 URL 與 URLSearchParams 建構子處理網址

總結

目前負責的專案在路由設計上採用 query string (例:/product?category=A)而非 path params (例:/product/category/A)來處理分頁,此篇筆記會記錄如何使用 web api URLURLSearchParams 來處理網址。

筆記

以下功能會回傳 url 中的 params 物件,傳入 initialValue 主要是為了滿足型別需求。

function getUrlSearchParams<T>(initialValue: T) {
  const url = new URL(window.location.href);
  const paramsEntries = Array.from(url.searchParams.entries());
  return paramsEntries.reduce((prev, curr) => {
    const [key, value] = curr;
    return { ...prev, [key]: value };
  }, initialValue);
}

// 以 https://example.com/product?category=A 為例,會取出 params = { category: 'A' }
const params = getUrlSearchParams({ category: '' });

以下功能會產生一組「開啟 Gmail 並預先填好收件人與信件主旨」的 url 連結:

function getMailUrl() {
  const baseUrl = 'https://mail.google.com/mail/u/0/';
  const params = new URLSearchParams();
  params.append('fs', '1');
  params.append('tf', 'cm');
  params.append('source', 'mailto');
  params.append('to', 'mail@example.com');
  params.append('su', '這裡寫主旨');
  const url = new URL(baseUrl);
  url.search = params.toString();
  return url.href;
}

參考文件