【问题标题】:Toggling dynamically created checkbox in react在反应中切换动态创建的复选框
【发布时间】:2016-08-24 10:46:10
【问题描述】:

我已经动态地创建了一个表格,以对每行中的一些字段和一个复选框做出反应。现在在列标题中我有一个复选框。当我单击复选框时,我希望选中所有行复选框。现在,如果我单击任何复选框,它应该会切换其状态。

到目前为止,我能够在表中生成动态行并删除单个行。

表格标题

                           <div class="row">
                                <div class="col-md-12">
                                    <div class="table-responsive">  
                                        <table id="mytable" class="table table-bordred table-striped">  
                                            <thead>  
                                                <th><input type="checkbox" id="checkall" onChange={this.checkAll}/></th>
                                                <th>Id</th>
                                                <th>Id1</th>
                                                <th>Id2</th>
                                                <th>Email</th>
                                                <th>Edit</th>  
                                                <th>Delete</th>
                                            </thead>
                                            <tbody>{users}</tbody>
                                        </table>
                                    </div>
                                </div>
                            </div>

新增用户功能

addUserState =(dat) => {
        let data = JSON.parse(dat);
        let id = this.randomPassword(32);

        let newElement = null
        newElement = <tr>
                    <td><input type="checkbox" class="checkthis"/></td>
                    <td class="userId">{id}</td>
                    <td class="id1">{data.payload.id1}</td>
                    <td class="id2">{data.payload.id2}</td>
                    <td class="userEmail">{data.payload.email}</td>
                    <td><p data-placement="top" title="Edit"><button class="btn btn-primary btn-xs" data-title="Edit" ><span class="glyphicon glyphicon-pencil"></span></button></p></td>
                    <td><p data-placement="top" title="Delete"><button class="btn btn-danger btn-xs" data-title="Delete" onClick={this.deleteUser.bind(this, id)}><span class="glyphicon glyphicon-trash"></span></button></p></td>
                    </tr>
        this.setState({users: this.state.users.concat([newElement])});
    }

CheckAll 函数:

checkAll = (e) => {
        let length = this.state.users.length;
        if(e.target.checked) {
            for(let i = 0; i < length; i++) {
                console.log(this.state.users[i]);
                //Do what here
            }
        }

    }

我发现的一种可能方法是将 checked state 属性与我创建的每个复选框相关联,但这将难以管理,因为我将执行 CRUD 对行的操作。

提前感谢您的帮助

【问题讨论】:

  • 您需要为表格行创建新的反应组件并在这个新组件中处理状态。在这种情况下,您将能够通知所有需要检查的组件行。此外,您将能够获得行的状态。

标签: javascript checkbox reactjs


【解决方案1】:

复选框是关于切换限制为真/假值的变量的数据状态。无需从 DOM 中读取它的值,React 为您提供了更简洁的方式。

toggleCheckbox() {
  checkbox.checked = !checkbox.checked;
}

请看这个fiddle。它包含在数据级别处理您的用例的代码的完整示例。

【讨论】:

  • 在每个属性行的小提琴中,您都使用了 state 中定义的已检查属性。我的行是动态创建的,这意味着我可以有大约 100 多行,并且我不应该为每个复选框单独使用选中的属性。
  • 哦,是的,您绝对应该为每一行存储checked 状态 - 或者至少您应该存储“已检查”行的索引/ID 并更新每个 checked 属性后面的渲染和状态逻辑行
  • 有没有有效的方法来解决这个问题。我不想最终使用它。
  • 为什么你认为它效率低下?我认为这对 React 来说是轻而易举的事。这就是 React 的用途。
  • 我需要动态添加行。但我不太清楚我该怎么做。你可以编辑你的小提琴,因为我想使用你的代码风格。我觉得比我的好多了。我会在实施后立即接受答案
猜你喜欢
  • 2017-02-27
  • 2020-08-07
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多