
Selamat siang teman-teman!
Saya mempersembahkan untuk Anda terjemahan dari artikel Kent Dodds
โ5 Fitur JavaScript yang Tidak Dapat Saya Kode Tanpaโ.Ini adalah terjemahan pertama saya, jadi saya akan senang dengan komentar apa pun.
5 fitur JavaScript yang tanpanya saya tidak bisa menulis kode
Sebelum kita mulai, izinkan saya berbicara sedikit tentang kode yang saya tulis. Hampir semua kode saya terdiri dari Javascript, ditambah beberapa HTML dan CSS. Saya menulis JS client dan server. Saya sedang menguji kode saya. Saya membuat dan mendistribusikan pustaka sumber terbuka yang digunakan oleh ribuan pengembang di seluruh dunia. Untuk frontend, saya menggunakan React, untuk backend - Express atau komputasi tanpa server.
Berikut adalah 5 fitur JS yang tanpanya saya tidak bisa menulis kode. Secara acak. Tentu saja, "tanpanya saya tidak bisa menulis kode" adalah hiperbola. Ini adalah fitur yang sangat saya sukai dan digunakan oleh saya sepanjang waktu.
1. Restrukturisasi
Saya menggunakan fitur ini di hampir semua file. Tidak masalah apakah itu komponen Bereaksi atau fungsi yang mengambil argumen, restrukturisasi adalah hal yang keren.
Berikut ini beberapa contohnya:
const address = { city: 'Salt Lake City', state: 'UT', zip: 84115, coords: { lat: 40.776608, long: -111.920485, }, }
Begini tampilannya di Bereaksi:
Fitur ini memungkinkan Anda melakukan beberapa hal menarik:
const info = { title: 'Once Upon a Time', protagonist: { name: 'Emma Swan', enemies: [ {name: 'Regina Mills', title: 'Evil Queen'}, {name: 'Cora Mills', title: 'Queen of Hearts'}, {name: 'Peter Pan', title: `The boy who wouldn't grow up`}, {name: 'Zelena', title: 'The Wicked Witch'}, ], }, }
2. Modul
Ini adalah fitur lain yang saya gunakan di hampir setiap file. Sebelum modul menjadi bagian dari bahasa, kami harus menggunakan perpustakaan dan alat aneh untuk bekerja dengan proyek besar. Dengan modul (dan pembangun seperti Rollup atau Webpack) kami memiliki peluang besar untuk berbagi kode dengan orang lain.
Berikut adalah beberapa contoh:
Jika Anda ingin tahu lebih banyak tentang modul, Anda dapat menonton video youtube saya -
โLebih dari yang ingin Anda ketahui tentang Modul ES6โ.3. Pengaturan Default
Saya suka dan menggunakan fitur ini setiap saat. Ini berlaku untuk argumen fungsi dan perusakan. Inilah cara ini digunakan untuk merestrukturisasi objek:
const bench = {type: 'Piano', adjustable: false} const {legs = 4} = bench
Perhatikan bahwa objek bangku tidak memiliki properti kaki. Tanpa sintaks parameter default, nilai kaki akan tidak terdefinisi.
Anda juga dapat menggunakan tugas yang merusak dengan fitur ini:
const bench = {type: 'Piano', adjustable: false} const {legs: legCount = 4} = bench
Berikut tampilannya di daftar parameter:
function getDisplayName(firstName = 'Unknown', lastName = 'Unknown') { return `${firstName} ${lastName}` }
Fitur ini juga memungkinkan Anda melakukan beberapa hal yang cukup menarik, karena nilai di sebelah kanan tanda "=" dihitung hanya jika perlu. Ini berarti Anda dapat menggunakannya untuk memeriksa parameter yang diperlukan:
function getCandy( kind = requiredParam('kind'), size = requiredParam('size'), upperKind = kind.toUpperCase(), callback = function noop() {}, ) { const result = {kind, size, upperKind} callback(result) return result } function requiredParam(argName) { throw new Error(`${requiredParam} is required`) }
Beberapa orang menganggap kode ini terlalu rumit. Mungkin mereka benar. Tetapi memahami cara kerjanya sangat keren!
Oh, dan Anda perhatikan bahwa kita dapat menggunakan argumen sebelumnya sebagai bagian dari parameter default untuk argumen berikut (seperti halnya dengan upperKind)? Bagus kan?
4. Fungsi panah
Saya sering menggunakan fungsi panah. Saya suka ekspresi fungsional, tetapi jika, misalnya, saya memerlukan fungsi callback anonim (yang saya tidak ingin memunculkan nama), atau saya ingin mendapatkan nilai balik implisit, maka fungsi panah hanyalah yang saya butuhkan.
Berikut ini beberapa contoh penggunaan fungsi panah:
const divide = (a, b) => a / b const getFive = () => 5 const identity = i => i const asArray = (...args) => args
5. Janji dan async / menunggu
JS adalah single-threaded dan dibangun pada sistem acara (panggilan tumpukan). Saya penggemar pembicaraan seperti
Apa itu loop acara? (dengan subtitle Rusia). Janji dan async / menunggu adalah alat yang hebat untuk mengelola ini. Sebagian besar kode saya asinkron, dan alat-alat ini sangat menyederhanakan pekerjaan saya. Jujur saja, janji adalah topik serius dan mengharuskan beberapa orang terbiasa, tapi itu bagus.
Saya sering menggunakan async / menunggu dalam tes dan backend. Berikut ini contoh uji asinkron:
test('Can fill out a form across multiple pages', async () => { mockSubmitForm.mockResolvedValueOnce({success: true}) const testData = {food: 'test food', drink: 'test drink'} const {findByLabelText, findByText} = render(<App />) user.click(await findByText(/fill.*form/i)) user.type(await findByLabelText(/food/i), testData.food) user.click(await findByText(/next/i)) user.type(await findByLabelText(/drink/i), testData.drink) user.click(await findByText(/review/i)) expect(await findByLabelText(/food/i)).toHaveTextContent(testData.food) expect(await findByLabelText(/drink/i)).toHaveTextContent(testData.drink) user.click(await findByText(/confirm/i, {selector: 'button'})) expect(mockSubmitForm).toHaveBeenCalledWith(testData) expect(mockSubmitForm).toHaveBeenCalledTimes(1) user.click(await findByText(/home/i)) expect(await findByText(/welcome home/i)).toBeInTheDocument() })
Berikut adalah contoh penggunaan async \ await di Express:
async function getListItems(req, res) { const listItems = await listItemsDB.query({ownerId: req.user.id}) res.json({listItems: await expandBookDataMultiple(listItems)}) }
Anehnya, saya tidak sering menggunakan async / menunggu dalam kode Bereaksi saya (setidaknya secara langsung). Ini karena saya mencoba melakukan sebagian besar "logika asinkron" di luar komponen saya. Karena itu, jika saya, misalnya, melakukan sesuatu yang tidak sinkron ketika memanggil useEffect di Bereaksi, saya membatasi diri pada satu panggilan ke fungsi asinkron, karena saya merasa lebih mudah untuk bekerja dengan janji-janji:
React.useEffect(() => { getUser().then( user => setState({status: 'success', error: null, user}), error => setState({status: 'error', error, user: null}), ) }, [])
Saya menyarankan Anda untuk membaca artikel oleh Anthony Chu
"Async / Menunggu di Node".Kesimpulan
Ada banyak fitur lain yang saya gunakan secara teratur dan yang dapat dimasukkan dalam daftar ini. Fitur-fitur ini adalah favorit saya, saya selalu menoleh ke sana. Ada juga beberapa tambahan baru pada bahasa yang belum memasukkan memori otot saya. Sekarang saatnya untuk menjadi pengembang JS! Semoga artikel ini bermanfaat bagi Anda! Semoga beruntung