Suatu kali, saya melihat kode dalam proyek tim tetangga yang menghasilkan string dengan parameter URL untuk penyisipan berikutnya ke dalam iframe
atribut src.
Artikel ini mungkin tampak berlebihan, jelas atau terlalu sederhana, tetapi karena ini ditemukan pada satwa liar, Anda tidak boleh diam tentang hal ini, tetapi berbagi praktik terbaik.
Jadi ini dia, kode aslinya:
const createQueryString = (param1, param2, objectId, timestamp, name) => {
const encodedTimestamp = encodeURIComponent(timestamp);
const delimiter = '&';
const queryString = `${param1}${delimiter}
param2=${param2}${delimiter}
objectId=${objectId}${delimiter}
itemTimestamp=${encodedTimestamp}${delimiter}
itemName=${name}`;
return queryString.replace(/ /g, '%20');
};
Untuk referensi, param1
dan param2
dalam kode asli memiliki nama berbicara. Dan nilainya dapat berupa string apa pun dengan banyak karakter yang tidak valid untuk karakter URL
Masalah apa yang dimiliki kode ini?
- -,
encodeURIComponent
, . ( , ); - -, , - template string
`
; .replace()
, ; - -, - , .
?
:
const delimiter = '&';
const createQueryString = (param1, param2, objectId, timestamp, name) => {
const queryString = [
`param1=${encodeURIComponent(param1)}`,
`param2=${encodeURIComponent(param2)}`,
`objectId=${encodeURIComponent(objectId)}`,
`itemTimestamp=${encodeURIComponent(timestamp)}`,
`itemName=${encodeURIComponent(name)}`
].join(delimeter);
return queryString;
};
? . , encodeURIComponent
. , . .
? ! :
const createQueryString = (param1, param2, objectId, timestamp, name) => {
const queryParams = {
param1,
param2,
objectId,
itemTimestamp: timestamp,
itemName: name
};
const encodeAndJoinPair = pair => pair.map(encodeURIComponent).join('=');
return Object.entries(queryParams).map(encodeAndJoinPair).join('&');
};
. , — .
, . , .
. , ? , queryParams
. . , . , :
const encodeAndJoinPair = pair => pair
.map(encodeURIComponent)
.join('=');
const createQueryString = objectParams => Object
.entries(objectParams)
.map(encodeAndJoinPair)
.join('&');
};
utils.js
.
URLSearchParams
Web API. URLSearchParams .
:
const createQueryString = objectParams => new URLSearchParams(objectParams).toString();
Internet Explorer, , , https://www.npmjs.com/package/url-search-params-polyfill .
Jika kodenya tampak verbose, membingungkan, maka mungkin ada cara sederhana untuk memperbaikinya.
Dan ada juga kemungkinan bahwa fungsionalitas yang Anda butuhkan diimplementasikan di tingkat Web API.