我在React和复选框方面遇到了一个非常烦人的问题。我正在使用的应用程序需要复选框列表,这些复选框代表保留在后端的设置。
有一个选项可以将设置恢复为原始状态 。
首先,我创建了一个组件,该组件具有一个类似于设置映射的对象。每个设置都有一个键和一个布尔值。因此:
{
bubbles: true,
gregory: false
}
被表示为:
<input type="checkbox" value="bubbles" checked="checked" />
<input type="checkbox" value="gregory" />
现在,React似乎对复选框应该如何工作一无所知。我不想设置复选框的值,我想使用“ checked”属性。
但是,如果我尝试这样的事情:
<input
type="checkbox"
value={setting}
checked={this.settings[setting]}
onChange={this.onChangeAction.bind(this)}
/>
我收到此警告:
警告:AwesomeComponent正在更改要控制的复选框类型的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命期间使用受控或不受控制的输入元素。更多信息:[
一些无用的文档页面,我读了几次都无济于事 ]
所以我决定创建另一个组件来包装每个单独的复选框,然后我得到了:
<input
type="checkbox"
checked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
现在,checked
该属性直接存在于我的状态中。
这会产生相同的警告,因此我尝试使用defaultChecked
:
<input
type="checkbox"
defaultChecked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
这使警告消失,但是现在它无法将checked
值重置为默认值。因此,我尝试使用该方法componentWillReceiveProps
,通过这种方式,我可以确定我的状态是正确的,this.state.checked
正确的并且该组件再次呈现。
确实如此。但是该复选框保持原始状态。现在我离开了那个丑陋的警告,我正在使用checked
。我该如何解决这个问题,以便消除警告?
我在想,也许有一种方法可以强制重新渲染组件,以便它捕获defaultChecked
并使用新值。但是我不知道该怎么做。也许 只
取消此组件的警告?那可能吗?也许还有其他事情可以做?
如果checked
将复选框的属性设置为null
或,则会出现问题undefined
。
这些是JS中的“错误”值,但是React对待的值null
好像根本没有设置该属性。由于未选中复选框的默认状态,因此一切正常。如果您随后将其设置checked
为true
React,则认为该属性突然存在!这是当React将您从不受控制切换为受控制的时候,因为现在道具checked
已经存在。
在您的示例中,您可以通过更改checked={this.settings[setting]}
为来消除此警告checked={!!this.settings[setting]}
。注意双爆炸(!!
)。他们将转换null
或undefined
以false
(离开true
单独的),等反应过来将你的注册checked
用的价值属性false
,并以受控的表单组件开始。
我也遇到了这个问题,我也没有阅读有关受控组件服务器时间的文档,但是最终我发现了这一点,所以我想分享一下。同样,由于15.2.0版触发了普通输入由set进行控制value
,而复选框却被set初始化为由set进行控制,而checked
不管其value
属性如何,这增加了一些混乱。
介绍 (Introduction) CheckboxGroup类用于对复选框进行分组。 类声明 以下是java.awt.CheckboxGroup类的声明: public class CheckboxGroup extends Object implements Serializable 类构造函数 SN 构造函数和描述 1 CheckboxGroup() () 创建Check
我已经试过了所有可能的方法,但还是没有成功。我有一个带有的模式窗口,我希望当模式打开时,的选中或取消选中应该基于数据库值。(我已经与其他表单字段一起工作了。)我开始试着检查,但没有用。 我的HTML分区: 和jQuery: 我也尝试了和其他在论坛上看到的,但似乎都不起作用。 有人能给我指出正确的方法吗? 好吧,我真的漏了点什么。如果复选框在页面中,我可以使用代码勾选/取消勾选,但如果它在模态窗口中
问题内容: 如何在Firefox中设置复选框样式,并取消选中标记和边框? CSS: HTML: 问题答案: input[type=”checkbox”] {
问题内容: 我正在Java中使用Selenium来测试Webapp中复选框的检查。这是代码: 我声明并将其分配给复选框所在的区域。 奇怪的是回报,因此 在复选框的HTML中,没有显示属性。但是,不是所有元素都有一个,这样的代码就可以工作吗? 问题答案: 如果您使用的是Webdriver,则正在寻找的项目已选中。 除非指定,否则通常在复选框呈现中实际上不会应用选中的属性。 所以您在Selenium
问题内容: 那么,如何只允许用户选择一个复选框呢? 我知道单选按钮是“理想的”,但出于我的目的……不是。 我有一个字段,用户需要选择两个选项中的一个或两个,但不能两个都选。问题是我还需要我的用户也可以取消选择他们的选项,这是单选按钮失败的地方,因为一旦选择了组,就必须选择一个选项。 我将通过php验证信息,但是我仍然想将用户限制在一个答案,如果他们想给它的话。 问题答案: 该代码段将: 允许像单选
主要内容:1. <s:checkboxlist> 实例,2. 单个默认选中值,2. 多个默认选中的值在Struts2,可以通过<s:checkboxlist>标签创建多个复选框具有相同名称。棘手的问题是如何设置的默认值在多个复选框。例如,复选框以“红色”,“黄色”,“蓝色”,“绿色”选项的列表,并且要同时设置“红色”和“绿色”为默认选中的值。这里创建一个Web工程:struts2setcheckboxes,来演示在多个复选框如何设置的默认值,整个项目的结构如下图所示: 下载代码 – http: