Mengikat Input kepada Objek dalam React
Katakan dalam state disimpan satu objek:
jsxconst initObj = {
prop1: 'value1',
prop2: 'value2',
prop3: 'value3',
}
function App() {
const [obj, setObj] = useState(initObj);
return <div>
{obj.prop1}-{obj.prop2}-{obj.prop3}
</div>;
}
Mari kita keluarkan setiap sifat objek kita dalam input yang berasingan:
jsxfunction App() {
const [obj, setObj] = useState(initObj);
return <div>
<input value={obj.prop1} />
<input value={obj.prop2} />
<input value={obj.prop3} />
<br />
{obj.prop1}-{obj.prop2}-{obj.prop3}
</div>;
}
Sekarang mari kita ikat setiap input dengan
peristiwa onChange. Sebagai pengendali,
tetapkan satu fungsi umum:
jsxfunction App() {
const [obj, setObj] = useState(initObj);
return <div>
<input value={obj.prop1} onChange={event => handleChange('prop1', event)} />
<input value={obj.prop2} onChange={event => handleChange('prop2', event)} />
<input value={obj.prop3} onChange={event => handleChange('prop3', event)} />
<br />
{obj.prop1}-{obj.prop2}-{obj.prop3}
</div>;
}
Seperti yang anda lihat, fungsi handleChange
menerima nama sifat objek yang sepadan
sebagai parameter pertama.
Mari kita tulis pelaksanaan fungsi kita:
jsxfunction handleChange(prop, event) {
const copy = Object.assign({}, obj);
copy[prop] = event.target.value;
setObj(copy);
}
Pelaksanaan ini berfungsi, tetapi ia boleh dipermudahkan jika menggunakan nama sifat objek yang boleh dikira:
jsxfunction handleChange(prop, event) {
setObj({...obj, ...{[prop]: event.target.value}});
}
Mari kita kumpulkan semua kod bersama:
jsxfunction App() {
const [obj, setObj] = useState(initObj);
function handleChange(prop, event) {
setObj({...obj, ...{[prop]: event.target.value}});
}
return <div>
<input value={obj.prop1} onChange={event => handleChange('prop1', event)} />
<input value={obj.prop2} onChange={event => handleChange('prop2', event)} />
<input value={obj.prop3} onChange={event => handleChange('prop3', event)} />
<br />
{obj.prop1}-{obj.prop2}-{obj.prop3}
</div>;
}
Katakan dalam state disimpan satu objek dengan tarikh:
jsxconst initDate = {
year: 2025,
month: 12,
day: 31,
}
Keluarkan dalam perenggan tahun, bulan dan hari dari tarikh yang disimpan dalam state, serta hari dalam minggu yang sepadan dengannya.
Ubah suai tugas sebelumnya dengan menambah tiga input untuk mengedit tarikh.