【问题标题】:Checkbox select all logic react js.How to unselect one by one afterwards?复选框选择所有逻辑反应js。之后如何取消选择?
【发布时间】:2021-07-12 16:57:16
【问题描述】:

根据标题,我正在实现一个选择所有复选框的复选框,并且它可以工作,但是当我一个一个取消选择时,检查仍保留在当前行上并消失在其他行上。

关于逻辑的注意事项:我有一个单独的组件,其中我有一个复选框来全选,并且选中该复选框后,我在本地存储中设置了一个布尔变量,以便在另一个组件中读取。

principalCheckbox 代码:

function handleChange() {
    if (checked === false) {
        localStorage.setItem('selectAllChecked', String(true))
        dispatch(reduxActions.selectAll())
        setChecked(true)
    } else {
        dispatch(reduxActions.clearSelection())
        localStorage.setItem('selectAllChecked', String(false))
        setChecked(false)
    }
}

<input type='checkbox' checked={checked} onChange={handleChange} />

单个复选框逻辑

<input 
    type='checkbox' 
    checked={checked ? checked : areAllSelected} 
    onChange={handleChange} 
/>

让我们分析一下条件 {checked ?checked : areAllSelected}:

case1:so 检查最初是假的(没有选择所以它进入 else->但是 allselected 也是假的,所以最初没有选择任何东西->OK)

case2:我点击单个复选框,所以选中存在,值是“选中”,所以单个项目被正确选择->ok

case3:我点击 selectAll 之前没有检查任何内容,所以条件转到 else 并且都被选中 -OK

case4:与 case 3 相同,我选择了所有内容,但是当我单击单行时,selectAll 的值为 false,并且单行中的一个为 true(但之前也被选中)并且它仍然处于选中状态,而应该是取消选择

关于如何实现这一目标的任何想法?

【问题讨论】:

    标签: javascript reactjs checkbox local-storage


    【解决方案1】:

    修改逻辑会更容易。

    “全部”复选框的选择/取消选择应触发所有项目的真正更改为选中或未选中。

    “全部”复选框的实际状态应由其余“单个”复选框的状态计算。

    【讨论】:

    • 如果更改复选框的方法是 onChange(所以如果我单击选中的复选框)或“选中”属性,我该怎么做?就像在我的代码中一样,我使它依赖于 allSelected 和当前选择 check={checked ?检查:areAllSelected}
    • @javaFE 你应该有一个带有复选框的列表,对吧?当您单击每个时,您应该更新此列表并将指定的复选框标记为checked。单击“全部”时,您应该将列表中的所有复选框更新为checked(或unchecked)。要查看是否应选中“全部”复选框,您可以执行const allSelected = checkboxList.every( checkbox =&gt; checkbox.checked === true )或根据您的变量/属性名称和列表/对象结构)。
    • 如果您可以发布代码的更多相关部分,我可以建议更详细的示例。
    • 实际上我有 1 个复选框,每次创建新行时都会创建一个复选框。我的主要问题是使选中的属性全局依赖于所有选中的复选框和单个复选框的单个选中
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2023-04-04
    • 2014-05-23
    • 2016-11-06
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多