使用React的方法來取得複選框中已選取的值
P粉590929392
2023-09-02 22:36:49
<p>我正在嘗試檢索複選框的選中值並將其保存到數組中。
我嘗試了:</p>
<pre class="brush:php;toolbar:false;">arr.push(setNewItem(checked))
arr.push(e.target.value.checked)
arr.push(items.checked)</pre>
<p>但這些傳回類型錯誤或未定義的值。 </p>
<pre class="brush:php;toolbar:false;">const [checkedItems, setCheckedItems] = useState([]);
const handleChange = (e) => {
if (e.target.checked) {
var arr = [...checkedItems];
//arr.push(setNewItem(e.target.value.checked));
setCheckedItems(arr);
console.log(arr);
} else {
checkedItems = "";
}
setIsChecked((current) => !current);
};</pre>
<pre class="brush:php;toolbar:false;">return (
<div className="App">
<StyleForm>
<StyleInput
type="text"
placeholder="加"
value={newItem}
onChange={(e) => setNewItem(e.target.value)}
onKeyPress={handleOnKeyPress}
/>
<ButtonAddStyle onClick={() => addItem()}>加</ButtonAddStyle>
<StyleUl>
{items.map((item) => {
return (
<StyleLi key={item.id}>
<StyleCheckBox
type="checkbox"
value={isChecked}
onChange={handleChange}
/>
{item.value}
{""}
<ButtonDelStyle onClick={() => deleteItem(item.id)}>
X
</ButtonDelStyle>
</StyleLi>
);
})}
</StyleUl>
</StyleForm>
</div>
);</pre>
這可能解決您的問題。
是正確的方法,可以擺脫:
你不能用這種方式更新狀態,當你嘗試取消選取一個輸入時,會出現錯誤:
現在讓我們看看你想做什麼,每次選取一個輸入時,你都儲存了
e.target.checked
,所以checkedItems
會變成這樣:你為什麼需要這個?更好的做法是儲存選取項目的id:
然後在jsx中:
現在看看這個:
你正在透過
items
進行映射,建立多個複選框,但它們都共享相同的值。而複選框的值屬性並不是你想像的那樣,請在這裡了解更多。所以你可以使用value={item.id}
為每個輸入設定一個唯一的值,並且可以擺脫isChecked
的useState hook,你真的不需要它。