我有一组两个单选按钮,其中一个在加载页面时会被检查。似乎我无法将其更改为第二个。如果重要的话,HTML由reactjs构建。 chrome上的标记看起来像:
<fieldset data-reactid=".0.0.0.0.0.0.1">
<label for="coop-radio-btn" data-reactid=".0.0.0.0.0.0.1.0">
<span data-reactid=".0.0.0.0.0.0.1.0.0">To a Cooperative</span>
<input type="radio" name="requestOnBehalfOf" value="coop" id="coop-radio-btn" data-reactid=".0.0.0.0.0.0.1.0.1">
</label>
<label for="union-radio-btn" data-reactid=".0.0.0.0.0.0.1.1">
<span data-reactid=".0.0.0.0.0.0.1.1.0">Additional Request</span>
<input type="radio" name="requestOnBehalfOf" value="union" checked="" id="union-radio-btn" data-reactid=".0.0.0.0.0.0.1.1.1">
</label>
</fieldset>
答案 0 :(得分:16)
<强>更新强>
这样做的“反应方式”是将defaultChecked={true}
添加到所需的输入中。其他方式如下所列。
我实际上遇到了同样的情况。我所做的是在父React组件的componentDidMount
lifecycle method中找到input
标记,然后设置checked
属性。
如果我们谈论vanilla JS,您可以使用querySelector找到第一个无线电输入。像这样:
var Form = React.createClass({
componentDidMount: function(){
this.getDOMNode().querySelector('[type="radio"]').checked = "checked";
},
render: function(){
//your render here
}
});
如果你使用jQuery,可以这样做:
...
$(this.getDOMNode()).find('[type="radio"]').eq(0).prop("checked", true);
...
答案 1 :(得分:5)
我曾经有类似的问题。
使用defaultChecked
prop(仅适用于)首次渲染,并提供onChange
函数来处理值更改。
我在这里找到了不同input
类型的一个很好的示例:http://bl.ocks.org/insin/raw/082c0d88f6290a0ea4c7/
答案 2 :(得分:4)
原因是React正在制作input
受控组件,因为每个输入的值都是从服务器端设置的。
如果向输入中添加value={whatever}
属性,使其成为受控组件,则然后它是只读的,您可以添加onChange
处理程序来更新值whatever
。来自the React docs:
为何选择受控制的组件?
在React中使用
<input>
等表单组件提出了在编写传统表单HTML时不存在的挑战。例如,在HTML中:<input type="text" name="title" value="Untitled" />
这将使用值
Untitled
呈现输入已初始化。当用户更新输入时,节点的值属性将更改。但是,node.getAttribute('value')
仍将返回初始化时使用的值Untitled
。与HTML不同,React组件必须在任何时间点表示视图的状态,而不仅仅是在初始化时。例如,在React中:
render: function() { return <input type="text" name="title" value="Untitled" />; }
由于此方法在任何时间点描述视图,因此文本输入的值始终为
Untitled
。
我找到的最简单的解决方案是将onChange={function(){}}
添加到input
。
答案 3 :(得分:3)
像这样使用defaultChecked
:
<input type="radio" name="temperature" value="hot" defaultChecked={true}/> Hot
<input type="radio" name="temperature" value="warm" /> Warm