reactjs – React form error将类型文本的受控输入更改为不受控
我正在使用受控输入创建一个简单的表单.在我的组件状态中,我在状态上有2个属性“clientName”和“license”.改变这些工作正常.但是有一个“运输”属性是一个对象.更改任何运输属性会产生错误.例如,如果我更改“address1”,只要在handleShippingChange函数中设置了状态,我就会收到错误:
我怀疑它与我如何定义那些TextFields的值以及我如何设置运输属性的状态有关.我究竟做错了什么?我的组件的代码如下: import React,{Component} from 'react'; import TextField from 'material-ui/TextField'; import RaisedButton from 'material-ui/RaisedButton'; import 'whatwg-fetch'; class Clients extends Component { constructor() { super(); this.state = { "clientName": "client name","shipping": { "name": "name","address1": "address 1","address2": "address 2","city": "city","state": "state","zip": "zip","country": "country" },"license": "license" }; this.handleChange = this.handleChange.bind(this); this.handleShippingChange = this.handleShippingChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); }; handleChange(event) { this.setState({ [event.target.name]: this.getFieldValue(event.target) }); }; handleShippingChange(event) { this.setState({ shipping: { [event.target.name]: this.getFieldValue(event.target) } }); }; getFieldValue(target) { return target.type === 'checkbox' ? target.checked : target.value; }; handleSubmit = (event) => { event.preventDefault(); // do some stuff }; render() { return <div> <h1> Clients Page </h1> <form onSubmit={this.handleSubmit}> <TextField hintText="Enter the client name" floatingLabelText="Client Name" value={this.state.clientName} onChange={this.handleChange} name="clientName" /> <h2>Shipping Info</h2> <TextField hintText="" floatingLabelText="Name" value={this.state.shipping.name} onChange={this.handleShippingChange} name="name" /> <br /> <TextField hintText="" floatingLabelText="Address Line 1" value={this.state.shipping.address1} onChange={this.handleShippingChange} name="address1" /> <br /> <TextField hintText="" floatingLabelText="Address Line 2" value={this.state.shipping.address2} onChange={this.handleShippingChange} name="address2" /> <br /> <TextField hintText="" floatingLabelText="City" value={this.state.shipping.city} onChange={this.handleShippingChange} name="city" /> <br /> <TextField hintText="" floatingLabelText="State" value={this.state.shipping.state} onChange={this.handleShippingChange} name="state" /> <br /> <TextField hintText="" floatingLabelText="Zip Code" value={this.state.shipping.zip} onChange={this.handleShippingChange} name="zip" /> <br /> <TextField hintText="" floatingLabelText="Country" value={this.state.shipping.country} onChange={this.handleShippingChange} name="country" /> <br /> <TextField hintText="" floatingLabelText="License" value={this.state.license} onChange={this.handleChange} name="license" /> <br /> <RaisedButton label="OK" primary={true} type="submit" /> </form> </div> }; } export default Clients; <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
受控/不受控制的输入意味着< input>字段是否有值.
// This is a controlled input <input value="foo"/> // This is an uncontrolled input <input value={null}/> 我们的想法是,您不希望从受控输入更改为不受控制的输入.两种类型的输入都不同,这可能导致潜在的错误或不一致. 最简单的解决方法是确保始终存在默认值(在空字段的情况下,默认值为空字符串”). 另外,请注意,一致类型通常优于可空类型,因为您对某个值的类型有所保证.这有助于减少由于空检查导致的开销(if(val!= null){/ * … etc * /}) 但是如果你只想要一行修复,你也可以在jsx中提供内联的默认值: <input value={value || ''}/> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- objective-c – 如何在Xcode的自动填充弹出窗口中包含Doxyg
- Oracle to_date()函数的用法介绍
- xml – 如何在XSLT 1中替换多个文本子字符串
- NoSQL数据库之Redis数据库管理(list类型)
- cocos2dx 3.X 接收图片 base64 转码显示
- Oracle优化查询改写(第四章-插入,更新与删除)
- 时间:2014年3月26日21:23:49XML特点
- c# – 如何在LINQ查询的where子句中调用方法/函数作为IEnum
- ruby-on-rails – Rails – 从Production.log恢复数据库
- postgresql – 数组成员的外键约束?