Nyahtanda berbilang kotak pilihan dalam kumpulan kotak semak menggunakan cangkuk React
P粉008829791
2023-08-30 13:23:32
<p>Saya menjalankan beberapa kotak pilihan dalam beberapa kumpulan kotak pilihan. Saya tidak dapat memikirkan cara untuk menyahtanda (dengan itu menukar keadaan) kotak pilihan tertentu. Atas sebab tertentu saya tidak dapat mengakses <code>e.target.checked</code>. </p>
<pre class="brush:php;toolbar:false;"><Kotak Semak
saiz="kecil"
nama={item}
nilai={item}
checked={checkboxvalues.includes(item)}
onChange={(e) =>
/></pra>
<p>dan fungsi saya</p>
<pre class="brush:php;toolbar:false;">const handleOnChange = (e) =>
const check = e.target.checked;
setChecked(!check);
};</pre>
<p>Saya membuat contoh berfungsi bagi komponen dalam <strong>kotak pasir ini</strong>. </p>
Begini cara saya melakukannya: https://codesandbox.io/s/elastic-pateu-flwqvp?file=/components/Selectors.js
Saya mengabstrak logik pemilihan menjadi
useSelection()
自定义钩子,这意味着当前选择可以在store[key].selected
中找到,其中key
可以是selectors
sebarang kunci.Setiap
useSelection()
调用中的items
、selected
、setSelected
和sectionLabel
都存储在store[key]
中,并传递给一个<CustomCheckboxGroup />
komponen.Bahagian yang berkaitan dialih keluar daripada nilai
handleCheck
函数,它根据先前选择的值设置新的选择:如果当前item
包含在先前的selected
dalam komponen. Jika tidak, tambahkannya.Penjelasan yang lebih terperinci (mengapa)
Melihat kod anda dengan teliti, nampaknya anda keliru tentang cara komponen kotak pilihan dalam React berfungsi.
input
的checked
属性由一个boolean
Kawalan status. Contoh generik:Pada setiap paparan, acara
<input />
的checked
值根据checked
状态的当前值设置。当输入的checked
发生变化(用户交互时),状态不会自动更新。但是onChange
dimatikan dan kami menggunakannya untuk mengemas kini keadaan kepada nilai negatif nilai negeri sebelumnya.Apabila berurusan dengan komponen
menggunakan satu nilai boolean untuk mengawal<CheckboxList />
, kami<CheckboxList />
组件时,我们不能使用单个布尔值来控制所有复选框,我们需要为正在渲染的每个复选框设置一个布尔值。因此,我们创建一个selected
数组,并将每个<input />
的checked
值设置为selected.includes(item)
的值(返回一个boolean
tidak bolehsemua
em>Setiap kotak semakmenetapkan nilai boolean. Oleh itu, kami mencipta tatasusunanonChange
事件中更新selected
数组的值。我们检查item
是否包含在先前版本的selected
kotak pilihan, kita perludipilih
dan menetapkan nilaichecked
setiap<input />
kepadaselected.includes Nilai daripada (item)
(mengembalikanboolean
).Anda perlu mencipta fungsi handleOnChange khusus untuk setiap kumpulan. Saya telah mencipta fungsi yang serupa untuk kumpulan kotak semak Genre dan anda boleh menciptanya untuk kumpulan lain dengan cara yang sama.
Ini ialah fungsi pemprosesan.
Lulus fungsi ini sebagai atribut handleOnChange kepada CustomCheckboxGroup seperti yang ditunjukkan di bawah.
Untuk ujian, ulas fungsi handleOnChange anda.
Lihat penyelesaian berfungsi lengkap dalam kotak pasir - Kod penuh