当前位置: 首页 > 面试题库 >

反应输入复选框选择所有组件

单凯捷
2023-03-14
问题内容

我试图建立一个适当的反应输入复选框,选择所有组件。想法是有一个组件<InputCheckboxAll><InputCheckbox>并且我可以检查<InputCheckboxAll>,所有组件也都<InputCheckbox>将被选中。

我有两个问题。

  • 如果<InputCheckboxAll>选中,则无法取消选择任何一个<InputCheckbox>
  • 如果已全部<InputCheckbox>选中,<InputCheckboxAll>则应进行检查。

这是例子。

var InputCheckboxAll = React.createClass({
  handleChange: function (event) {
    this.props.handleChange(event)
  },
  render: function () {
    return (
    <input
           type='checkbox'
           {...this.props}
           onChange={this.handleChange} />
    )
  }
})

var InputCheckbox = React.createClass({
  getInitialState: function () {
    return {
      checked: this.props.checked
    }
  },
  render: function () {
    var checkedValue = this.props.allChecked ? true : this.state.checked
    return (
    <input
           checked={checkedValue}
           type='checkbox'
           {...this.props}/>
    )
  }
})

var Test = React.createClass({
  getInitialState: function () { return {allChecked: false}; },
  handleChange: function (event) {
    var $elm = $(event.target)
    var checked = $elm.prop('checked')
    this.setState({
      allChecked: checked
    })
  },
  render: function () {
    return (
    <div>
      Select All: <InputCheckboxAll handleChange={this.handleChange}/><br/>
      <InputCheckbox allChecked={this.state.allChecked}/><br/>
      <InputCheckbox allChecked={this.state.allChecked}/><br/>
      <InputCheckbox allChecked={this.state.allChecked}/><br/>
    </div>
    )
  }
})

React.render(<Test/>, document.body)

问题答案:

我认为可能会对您的实现进行一些修改,以便以更具 React风格的 形式获得所需的结果。

首先要取消的是InputCheckboxAll复选框类和该类的allCheckedprop
InputCheckbox。复选框是一个相对愚蠢的元素,它不应该了解诸如之类的概念Everything is selected

取而代之的是,应将复选框实现为简单 选中 或未 选中的项目

var InputCheckbox = React.createClass({
  getDefaultProps: function () {
    return {
      checked: false
    }
  },
  render: function () {
    return (
    <input
           checked={this.props.checked}
           type='checkbox'
           {...this.props}/>
    )
  }
})

您应从主应用程序管理应用程序的状态(如“ 所有选定项”之类的 概念),使较低级别的元素保持无状态。主应用程序的状态可以简单地表示每个复选框的 选中
状态:

  getInitialState: function () { 
      return {
        // 3 checkboxes, all initialized as unchecked
        checked: [false, false, false]
      }; 
  },

现在,您可以重新创建渲染功能以绘制3个复选框,以及您选择的所有复选框。每个数组都<InputCheckbox>可以绑定到自己的数据this.state.checked。当<Inputcheckbox>更改时,我们将索引绑定到更改处理程序,因此我们知道要修改哪个数组元素。

  render: function () {
    // Recalculate if everything is checked each render, instead of storing it
    var isAllChecked = this.state.checked.filter(function(c) {
        return c;
    }).length === this.state.checked.length;

    return (
    <div>
      Select All: <InputCheckbox 
               onChange={this.selectAll} 
               checked={isAllChecked}/><br/>

      <InputCheckbox 
               checked={this.state.checked[0]} 
               onChange={this.handleChange.bind(this, 0)}/><br/>
      <InputCheckbox 
               checked={this.state.checked[1]} 
               onChange={this.handleChange.bind(this, 1)}/><br/>
      <InputCheckbox 
               checked={this.state.checked[2]} 
               onChange={this.handleChange.bind(this, 2)}/><br/>
    </div>
    )
  }

您不需要存储与 All Selected 相关的任何状态。相反,最好在每个渲染期间重新计算是否选择了所有内容。Select All选中此复选框后,我们只需将的每个元素设置this.state.checked为true。

这还具有以下优点:当您手动选择所有复选框时,全选复选框将自行检查。

这是一个示例实现:https :
//jsfiddle.net/rsupvxry/



 类似资料:
  • 我想有一个依赖的数字输入。 此数字输入依赖于一个选择框,该选择框通过选择每个选项为输入创建一个特定的数字范围。 例如: 如果我们选择option2,数字输入将是min=20和max=50!如果我们选择option3,数字输入将是min=10和max=30!怎样才能创造出这样一个特征呢? 以下是我尝试过的:

  • 问题内容: 我正在尝试选中一个复选框的所有复选框。但是该怎么做呢? 这是我的HTML: 我创建了一个额外的复选框以选择并取消选择所有复选框。 JS: 我也尝试过,但是没有一个对我有用:( 问题答案: 您错过了容器的div 和和。 是正确的变体。 https://jsfiddle.net/0vb4gapj/1/

  • 问题内容: 我需要有关jQuery选择器的帮助。假设我有一个标记,如下所示: 除了用户单击时,如何获取所有复选框? 问题答案: 一个更完整的示例适用于您的情况: 当被点击复选框,该复选框的状态进行检查,并在当前形式的所有复选框被设置为相同的状态。 请注意,您无需从选择中排除该复选框,因为该复选框的状态将与其他所有复选框相同。如果出于某些原因确实需要排除,则可以使用以下方法:

  • 我创建了一个windows窗体(到目前为止)只包含复选框。构造函数接受一个参数:。对于这个数组中的每个字符串,我都会创建一个复选框。 例如: null 那么,当另一个复选框调用uncheck时,是否有一种方法可以告诉我的复选框不要运行? 下面是我的代码(它都是手工编写的,所以没有使用visual studio设计器):

  • 问题内容: 所以我有这些复选框: 等等。它们大约有6个,并且都是手工编码的(即未从数据库中获取),因此它们可能会保持一段时间不变。 我的问题是如何将它们全部放入数组中(使用javascript),以便在使用Jquery 进行AJAX 请求时可以使用它们。 有什么想法吗? 编辑:我只希望将选中的复选框添加到数组 问题答案: 格式化: 希望它会起作用。

  • 问题内容: 所以我有这些复选框: 等等。它们大约有6个,并且是手工编码的(即,不是从数据库中获取的),因此它们可能会保持一段时间不变。 我的问题是如何将它们全部放入一个数组中(使用javascript),以便在使用Jquery 进行AJAX 请求时可以使用它们。 有什么想法吗? 编辑:我只希望将所选的复选框添加到数组 问题答案: 格式化: 希望它将成功。