hx-vals dan hx-params — HTMX

hx-vals menambahkan nilai ke request, hx-params mengontrol parameter mana yang dikirim. hx-vals (static values) Approve hx-vals (JavaScript) Submit hx-params…

hx-vals menambahkan nilai ke request dalam bentuk JSON, nilai yang gak ada di kotak isian mana pun. hx-params menyaring parameter mana yang benar-benar dikirim. Bayangin nota di meja Laundry Bu Rini. Saat pelanggan memilih layanan express, Bu Rini mengecap "EXPRESS" di nota: nilai yang gak ditulis di kotak mana pun. Itu hx-vals. Sebelum nota dikirim ke belakang, dia menggunting potongan "perkiraan harga" yang tadi ditunjukkan ke pelanggan, karena bagian belakang menghitung harga sendiri. Itu hx-params.

🧪 Tebakan cepat: Form punya <input name="berat" value="4"> dan hx-vals='{"berat": 10}'. Berat berapa yang diterima server? Jawabannya ada di bagian "hx-vals menang dari field bernama sama".

hx-vals: nilai tambahan dalam JSON

Tombol di papan order gak punya kotak isian, jadi datanya dibawa hx-vals:

<span id="status-12">Dicuci</span>
<button hx-post="/order/12/status" hx-vals='{"status": "Disetrika"}' hx-target="#status-12">
  Tandai disetrika
</button>

Di form: digabung dengan field

<form id="terima" hx-post="/order" hx-target="#nota" hx-vals='{"layanan": "express"}'>
  <input name="nama" value="Bu Tini">
  <input name="berat" value="4">
  <input name="perkiraan" value="Rp 28.000" readonly>
  <button>Terima cucian</button>
</form>

Body-nya: nama=Bu%20Tini&berat=4&perkiraan=Rp%2028.000&layanan=express. Nilai dari hx-vals ditaruh di belakang, sesudah field form.

hx-vals menang dari field bernama sama

Dengan hx-vals='{"berat": 10}', body-nya jadi nama=Bu%20Tini&perkiraan=Rp%2028.000&berat=10. Berat 4 dari kotaknya dibuang, dan server menerima 10. Itu jawaban tebakannya. htmx menghapus field yang namanya sama dengan kunci hx-vals, lalu menaruh nilai hx-vals di belakang. Pakai ini dengan sengaja, atau beri kunci yang berbeda.

hx-params: saring yang dikirim

hx-params Body yang dikirim
* (bawaan) nama=Bu%20Tini&berat=4&perkiraan=Rp%2028.000
not perkiraan nama=Bu%20Tini&berat=4
nama,berat nama=Bu%20Tini&berat=4
none (kosong)

js: nilai dari JavaScript, dan catatan keamanannya

<button hx-post="/order/12/status" hx-vals='js:{jam: new Date().getHours()}'>

⚠️ Jebakan yang sering ketemu

TL;DR: hx-vals='{"status": "Disetrika"}' menambahkan nilai JSON ke request: ke body untuk POST, ke URL untuk GET (?page=2). Bungkus dengan kutip satu, karena JSON butuh kutip dua, dan JSON yang rusak membuat request gak dikirim. Nilai hx-vals ditaruh sesudah field form dan menimpa field yang namanya sama. hx-params menyaring di akhir: * (bawaan), not perkiraan, nama,berat, atau none, dan ikut menyaring hx-vals. js: menjalankan JavaScript, jadi jangan isi dengan teks dari pengguna.

Yang akan kamu pelajari