Dalam literal template es6, bagaimana cara membungkus literal template yang panjang menjadi multiline tanpa membuat baris baru dalam string?
Misalnya, jika Anda melakukan ini:
const text = `a very long string that just continues
and continues and continues`
Kemudian itu akan membuat simbol baris baru ke string, sebagai interpretasinya untuk memiliki baris baru. Bagaimana cara membungkus literal template yang panjang menjadi beberapa baris tanpa membuat baris baru?
javascript
ecmascript-6
template-literals
Ville Miekk-oja
sumber
sumber
Jawaban:
Jika Anda memasukkan sebuah baris lanjutan (
\
) pada titik baris baru secara literal, itu tidak akan membuat baris baru pada keluaran:const text = `a very long string that just continues\ and continues and continues`; console.log(text); // a very long string that just continuesand continues and continues
sumber
1.1k Airbnb library
and continues...
harus dimulai dari posisi 0 di baris baru, melanggar aturan indentasi.Ini yang lama. Tapi itu muncul. Jika Anda meninggalkan spasi di editor, itu akan menempatkannya di sana.
if const text = `a very long string that just continues\ and continues and continues`;
cukup lakukan simbol + normal
if const text = `a very long string that just continues` + `and continues and continues`;
sumber
Anda bisa memakan jeda baris di dalam template literal Anda.
// Thanks to https://twitter.com/awbjs for introducing me to the idea // here: https://esdiscuss.org/topic/multiline-template-strings-that-don-t-break-indentation const printLongLine = continues => { const text = `a very long string that just ${continues}${'' } and ${continues} and ${continues}`; return text; } console.log(printLongLine('continues'));
sumber
prettier
) yang dikonfigurasi di IDE Anda.prettier
membungkus ini kembali ke satu baris.EDIT : Saya telah membuat modul NPM kecil dengan utilitas ini. Ini berfungsi di web dan di Node dan saya sangat merekomendasikannya melalui kode dalam jawaban saya di bawah ini karena jauh lebih kuat. Ini juga memungkinkan untuk mempertahankan baris baru dalam hasil jika Anda memasukkannya secara manual sebagai
\n
, dan menyediakan fungsi ketika Anda sudah menggunakan tag literal template untuk sesuatu yang lain: https://github.com/iansan5653/compress-tagSaya tahu saya terlambat menjawab di sini, tetapi jawaban yang diterima masih memiliki kelemahan yaitu tidak mengizinkan indentasi setelah jeda baris, yang berarti Anda masih tidak dapat menulis kode yang tampak sangat bagus hanya dengan keluar dari baris baru.
Sebaliknya, mengapa tidak menggunakan fungsi literal template yang diberi tag ?
function noWhiteSpace(strings, ...placeholders) { // Build the string as normal, combining all the strings and placeholders: let withSpace = strings.reduce((result, string, i) => (result + placeholders[i - 1] + string)); let withoutSpace = withSpace.replace(/\s\s+/g, ' '); return withoutSpace; }
Kemudian Anda cukup memberi tag literal template apa pun yang Anda inginkan untuk memiliki jeda baris:
let myString = noWhiteSpace`This is a really long string, that needs to wrap over several lines. With a normal template literal you can't do that, but you can use a template literal tag to allow line breaks and indents.`;
Ini memang memiliki kelemahan karena mungkin memiliki perilaku yang tidak terduga jika pengembang masa depan tidak terbiasa dengan sintaks template yang diberi tag atau jika Anda tidak menggunakan nama fungsi deskriptif, tetapi rasanya seperti solusi terbersih untuk saat ini.
sumber
Opsi lainnya adalah menggunakan
Array.join
, seperti:[ 'This is a very long string. ', 'It just keeps going ', 'and going ', 'and going ', 'and going ', 'and going ', 'and going ', 'and going', ].join('')
sumber
Gunakan yang lama dan yang baru. Literal template sangat bagus, tetapi jika Anda ingin menghindari literal yang panjang agar memiliki baris kode yang padat, gabungkan dan ESLint tidak akan menimbulkan keributan.
const text = `a very long string that just continues` +` and continues and continues`; console.log(text);
sumber
Mirip dengan jawaban Doug, ini diterima oleh konfigurasi TSLint saya dan tetap tidak tersentuh oleh pemformat otomatis IntelliJ saya:
const text = `a very long string that just ${ continues } and ${continues} and ${continues}`
sumber
Solusi yang diusulkan oleh @CodingIntrigue tidak berfungsi untuk saya pada node 7. Nah, ini berfungsi jika saya tidak menggunakan kelanjutan baris pada baris pertama, sebaliknya gagal.
Ini mungkin bukan solusi terbaik, tetapi berfungsi tanpa masalah:
(` border:1px solid blue; border-radius:10px; padding: 14px 25px; text-decoration:none; display: inline-block; text-align: center;`).replace(/\n/g,'').trim();
sumber