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

更改受控复选框的选中属性(反应)

宋伯寅
2023-03-14
问题内容

我是React的新手,可能缺少正确的术语来找到我的问题的解决方案。没那么难。

我正在构建一个简单的应用程序,它显示一组问题,一次显示一个问题。回答一个问题后,显示下一个问题。

我有一个Question呈现3个复选框的组件,每个复选框代表一个可能answer的问题。

{this.props.question.answers.map((answer, index) => {
  return (
    <li className="Question__answer" key={answer.id}>
      <label className="Question__answer-label">
        <input
          className="Question__answer-checkbox"
          type="checkbox"
          value={index}
          onChange={this.props.setAnswer}
          defaultChecked={false} />
        {answer.answer}
      </label>
    </li>

    ...

    <button className="Question__next" type="button" onClick={this.props.onNext} disabled={this.props.isDisabled}>
        Next question
      </button>
  )
})}

在我的主要组件内部,我Quiz这样调用该组件:

<Question step={this.state.step} question={this.state.questions[this.state.step]} setAnswer={this.setAnswer} onNext={this.onNext} isDisabled={this.isDisabled()} />

onNext是我的函数,该函数递增this.state.step以显示下一个问题:

onNext(event) {
    this.setState({step: this.state.step + 1});
}

一切正常,除了:当显示下一个问题时,我希望所有3个复选框都不再选中。目前,他们从先前回答的问题中记住自己的检查状态。


问题答案:

因此,事实是React渲染了其组件,从而仅渲染了更改的组件。由于重新渲染后复选框的checked属性没有任何变化,因此它们保持其先前状态。

您应该做的是在setAnswer函数中单击时切换复选框状态,并将其作为道具传递给Question组件。

就像是

this.state {
   checkedAttr: ["false", "false", "false"]
}

像这样传递

<Question step={this.state.step} question={this.state.questions[this.state.step]} setAnswer={this.setAnswer} onNext={this.onNext} isDisabled={this.isDisabled()} checkedAttr={this.state.checkedAttr} />

在复选框状态下使用它们为

{this.props.question.answers.map((answer, index) => {
  return (
    <li className="Question__answer" key={answer.id}>
      <label className="Question__answer-label">
        <input
          className="Question__answer-checkbox"
          type="checkbox"
          value={index}
          checked={this.props.checkedAttr[index]}
          onChange={this.props.setAnswer}
          defaultChecked={false} />
        {answer.answer}
      </label>
    </li>

    ...

    <button className="Question__next" type="button" onClick={this.props.onNext} disabled={this.props.isDisabled}>
        Next question
      </button>
  )
})}

onNext功能中,只需将状态重置为checkedAttr即可false



 类似资料:
  • 问题内容: 我正在Java中使用Selenium来测试Webapp中复选框的检查。这是代码: 我声明并将其分配给复选框所在的区域。 奇怪的是回报,因此 在复选框的HTML中,没有显示属性。但是,不是所有元素都有一个,这样的代码就可以工作吗? 问题答案: 如果您使用的是Webdriver,则正在寻找的项目已选中。 除非指定,否则通常在复选框呈现中实际上不会应用选中的属性。 所以您在Selenium

  • 对于文本类型的输入很容易,使用onChange()我更新状态,调用setState(),并通过其value属性显示输入上的状态。然而,对于复选框,甚至更多的文件,我完全迷路了。 这将是: 处理程序 事件对象的属性 属性。。。输入 输入示例 onChange()

  • 问题内容: 我希望一个事件在选中/未选中复选框时触发客户端: 基本上,我希望页面上的每个复选框都发生这种情况。这种触发点击并检查状态的方法可以吗? 我认为必须有一种更清洁的jQuery方式。有人知道解决方案吗? 问题答案: 绑定到事件而不是。但是,您可能仍然需要检查是否已选中该复选框: 绑定到 事件 而不是事件的主要好处是,并非所有对复选框的单击都会导致其更改状态。如果只想捕获导致复选框更改状态的

  • 问题内容: 我在尝试创建一个使用React选择和取消选择其他单个复选框(全选/全选)的复选框时遇到了一个小问题。我已阅读http://facebook.github.io/react/docs/forms.html,发现 受控 和 非受控 s 之间存在差异。我的测试代码如下: “全局选择器”按预期方式工作:选中后,将选中所有其他检查。问题在于,当单击其他复选框之一时,不会触发处理程序。 我不知道进

  • 警告:组件正在更改要控制的非受控输入类型复选框。输入元件不应从不受控制切换到受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。 我的代码:

  • 我有一个复选框,从那里我得到选中的值,但第一次工作得很好,但回发后我一点也不改变,总是返回true。 我只是在做这个 我在同一个控件中有另一个复选框,它没有初始化选中的属性,并且总是工作正常。那么我该如何解决这个问题呢?