Deaktivieren Sie mehrere Kontrollkästchen in der Kontrollkästchengruppe mithilfe von React-Hooks
P粉008829791
2023-08-30 13:23:32
<p>Ich habe mehrere Kontrollkästchen in mehreren Kontrollkästchengruppen ausgeführt. Ich kann nicht herausfinden, wie ich ein bestimmtes Kontrollkästchen deaktivieren (und damit den Status ändern) kann. Aus irgendeinem Grund kann ich nicht auf <code>e.target.checked</code> zugreifen. </p>
<pre class="brush:php;toolbar:false;"><Kontrollkästchen
Größe="klein"
name={item}
value={item}
geprüft={checkboxvalues.includes(item)}
onChange={(e) => handleOnChange(e)}
/></pre>
<p>und meine Funktionen</p>
<pre class="brush:php;toolbar:false;">const handleOnChange = (e) =>
const check = e.target.checked;
setChecked(!check);
};</pre>
<p>Ich habe ein funktionierendes Beispiel der Komponente in <strong>dieser Sandbox</strong> erstellt. </p>
这是我如何做的:https://codesandbox.io/s/elastic-pateu-flwqvp?file=/components/Selectors.js
我将选择逻辑抽象成了一个
useSelection()
自定义钩子,这意味着当前选择可以在store[key].selected
中找到,其中key
可以是selectors
的任何键。每个
useSelection()
调用中的items
、selected
、setSelected
和sectionLabel
都存储在store[key]
中,并传递给一个<CustomCheckboxGroup />
组件。相关部分是该组件内的
handleCheck
函数,它根据先前选择的值设置新的选择:如果当前item
包含在先前的selected
值中,则将其移除。否则,将其添加。更详细的解释(为什么)
仔细观察你的代码,似乎你对React中的复选框组件的工作原理感到困惑。
input
的checked
属性由一个boolean
状态控制。通用示例:在每次渲染时,
<input />
的checked
值根据checked
状态的当前值设置。当输入的checked
发生变化(用户交互时),状态不会自动更新。但是onChange
事件被触发,我们使用它来将状态更新为状态先前值的负值。当处理
<CheckboxList />
组件时,我们不能使用单个布尔值来控制所有复选框,我们需要为正在渲染的每个复选框设置一个布尔值。因此,我们创建一个selected
数组,并将每个<input />
的checked
值设置为selected.includes(item)
的值(返回一个boolean
)。为了使其工作,我们需要在每个
onChange
事件中更新selected
数组的值。我们检查item
是否包含在先前版本的selected
中。如果存在,则将其过滤掉。如果不存在,则将其添加进去:希望这能解决一些问题。
您需要为每个组创建特定的handleOnChange函数。我已经为Genre复选框组创建了一个类似的函数,您可以按照相同的方式为其他组创建。
这是处理函数。
将此函数作为handleOnChange属性传递给CustomCheckboxGroup,如下所示。
为了测试,请注释掉您的handleOnChange函数。
在沙箱中查看完整的工作解决方案 - 完整代码