[英]How do I use radio buttons in React?
我正在制作一个表格,我需要一个无线电输入。 如何在 onSubmit 函数中获得选中的单选输入,正确的方法是什么?
这是我的代码,当我提交时,我的 myRadioInput 变量包含选项 A 或选项 B:
React.createClass({
handleSubmit: function() {
e.preventDefault();
var myTextInput = this.refs.myTextInput.getDOMNode().value.trim();
var myRadioInput = "How ?";
},
render: function() {
return (
<form onSubmit={this.handleSubmit}>
<input type="text" ref="myTextInput" />
<label>
<span>Option A</span>
<input type="radio" name="myRadioInput" value="Option A"/>
</label>
<label>
<span>Option B</span>
<input type="radio" name="myRadioInput" value="Option B"/>
</label>
<input type="submit" value="Submit this"/>
</form>
)
}
});
如果您确保所有表单元素都具有name
属性,则可以使用form.elements
从表单onSubmit
提取数据:
handleSubmit: function(e) {
e.preventDefault()
var form = e.target
var myTextInput = form.elements.myTextInput.value
var myRadioInput = form.elements.myRadioInput.value
// ...
}
在现代浏览器中, form.elements.myRadioInput
应该是一个RadioNodeList
,它有一个对应于所选值的.value
,但是当它不被支持时,你将得到一个NodeList
或HTMLCollection
节点,必须迭代这些节点才能找到所选值。
我还有一个可重用的 React 组件 - <AutoForm>
- 它为您使用了从form.elements
提取数据的通用实现。 我在下面的代码片段中使用了它:
<meta charset="UTF-8"> <script src="http://fb.me/react-0.13.1.js"></script> <script src="http://fb.me/JSXTransformer-0.13.1.js"></script> <script src="https://cdn.rawgit.com/insin/react-auto-form/master/dist/react-auto-form.js"></script> <div id="app"></div> <script type="text/jsx;harmony=true">void function() { "use strict"; var Example = React.createClass({ getInitialState() { return {submittedData: null} }, handleSubmit(e, submittedData) { e.preventDefault() this.setState({submittedData}) }, render() { return <div> <AutoForm onSubmit={this.handleSubmit}> <input type="text" name="myTextInput" /> <label> <span>Option A</span> <input type="radio" name="myRadioInput" value="Option A"/> </label> <label> <span>Option B</span> <input type="radio" name="myRadioInput" value="Option B"/> </label> <input type="submit" value="Submit this"/> </AutoForm> {this.state.submittedData && <pre> {JSON.stringify(this.state.submittedData, null, 2)} </pre>} </div> } }); React.render(<Example/>, document.getElementById('app')) }()</script>
您不应该使用 refs 来访问 DOM 节点并检查它们的值。 相反,您应该将输入值链接到组件状态的属性。
以下是一些操作示例: https : //facebook.github.io/react/docs/two-way-binding-helpers.html
{ items.map(item =>
<span id="qn" key={item.qno}>{item.qno}</span>
)}
{ items.map(item =>
<span id="qd" key={item.qno}>{item.question}<br/>
<br/>
<input onClick={this.captureClick} type="radio" value="1" checked={this.state.option === "1"}
onChange={this.handleChange}/>
{ item.options.map(option =>
<span id="op" key={option.option1}>
{option.option1}</span>
)}<br/>
<br/> <input onClick={this.captureClick} type="radio" value="2" checked={this.state.option === "2"}
onChange={this.handleChange} />
{ item.options.map(option =>
<span id="op" key={option.option2}>
{option.option2}</span>
)}<br/><br/>
<input onClick={this.captureClick} type="radio" value="3" checked={this.state.option === "3"}
onChange={this.handleChange} />
{ item.options.map(option =>
<span id="op" key={option.option3}>
{option.option3}</span>
)}<br/><br/>
<input onClick={this.captureClick} type="radio" value="4" checked={this.state.option === "4"}
onChange={this.handleChange} />
{ item.options.map(option =>
<span id="op" key={option.option4}>{option.option4}</span>
)}<br/><br/>
<button type="submit" className="save" onClick={this.onSave}>SAVE</button>
</span>
您也可以像这样使用单选按钮
我将此解决方案用于单选按钮与 active 的双向绑定:
在 render() 方法中:
const items = [
{label: 'one', checked: false},
{label: 'two', checked: true},
{label: 'three', checked: true}
];
items.map((item, index) => (
<div className={`radioItem (item.checked) ? 'active' : ''`}>
<label>
{item.label}
<input type="radio"
name="address"
value={item.label}
onClick={(e)=>{
$('.radioItem').filter('.active').removeClass('active');
$(e.currentTarget).closest('.radioItem').addClass('active');
}}
ref={elm => $(elm).prop('checked', item.checked)}
/>
</label>
</div>
))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.