使用React的方法来获取复选框中已选中的值
P粉590929392
P粉590929392 2023-09-02 22:36:49
[React讨论组]
<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) =&gt; { if (e.target.checked) { var arr = [...checkedItems]; //arr.push(setNewItem(e.target.value.checked)); setCheckedItems(arr); console.log(arr); } else { checkedItems = &quot;&quot;; } setIsChecked((current) =&gt; !current); };</pre> <pre class="brush:php;toolbar:false;">return ( &lt;div className=&quot;App&quot;&gt; &lt;StyleForm&gt; &lt;StyleInput type=&quot;text&quot; placeholder=&quot;添加&quot; value={newItem} onChange={(e) =&gt; setNewItem(e.target.value)} onKeyPress={handleOnKeyPress} /&gt; &lt;ButtonAddStyle onClick={() =&gt; addItem()}&gt;添加&lt;/ButtonAddStyle&gt; &lt;StyleUl&gt; {items.map((item) =&gt; { return ( &lt;StyleLi key={item.id}&gt; &lt;StyleCheckBox type=&quot;checkbox&quot; value={isChecked} onChange={handleChange} /&gt; {item.value} {&quot;&quot;} &lt;ButtonDelStyle onClick={() =&gt; deleteItem(item.id)}&gt; X &lt;/ButtonDelStyle&gt; &lt;/StyleLi&gt; ); })} &lt;/StyleUl&gt; &lt;/StyleForm&gt; &lt;/div&gt; );</pre>
P粉590929392
P粉590929392

全部回复(2)
P粉575055974

这可能解决您的问题。

const [checkedItems, setCheckedItems] = useState([]);
const handleChange = (e) => {
  setCheckedItems( prev => [...prev, e.target.checked]);
  setIsChecked((current) => !current);
};
P粉846294303
arr.push(e.target.checked);

是正确的方法,可以摆脱:

else {
checkedItems = "";
}

你不能用这种方式更新状态,当你尝试取消选中一个输入时,会出现错误:

现在让我们看看你想做什么,每次选中一个输入时,你都存储了e.target.checked,所以checkedItems会变成这样:

[true, true, true, true, true, true, true, true]

你为什么需要这个?更好的做法是存储选中项的id:

const handleChange = (isChecked, id) => {
  var arr = [...checkedItems];
  if (isChecked) {
    arr.push(id);
    setCheckedItems(arr);
  } else {
    setCheckedItems(checkedItems.filter((storedId) => storedId !== id)); // 如果对应的输入未选中,则从checkedItems中删除id
  }
};

然后在jsx中:

<StyleCheckBox
  type="checkbox"
  value={item.id}
  onChange={(e) => {
    handleChange(e.target.checked, item.id);
  }}
/>;

现在看看这个:

<StyleCheckBox
  value={isChecked} // 这一行
>

你正在通过items进行映射,创建多个复选框,但它们都共享相同的值。而复选框的值属性并不是你想象的那样,请在这里了解更多。所以你可以使用value={item.id}为每个输入设置一个唯一的值,并且可以摆脱isChecked的useState hook,你真的不需要它。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号