cal*_*ala 3 javascript meteor reactjs
我正在尝试处理我的表单中的更改.我有标题,描述和类别.
第一个输入(标题) - >无法在字段中输入.
第二个输入(描述) - >能够输入字段但结果未定义.
第三个输入(类别DDL) - >无法更改所选类别,但默认选择在我的alret中输出为'drink';
问题:
AddDeal正在更改类型文本的受控输入以使其不受控制.输入元素不应从受控切换到不受控制(反之亦然).决定在组件的使用寿命期间使用受控或不受控制的输入元素.
我已经在这里查看了受控组件的反应文件,但发现它很难理解,因为我是新手.
https://facebook.github.io/react/docs/forms.html#controlled-components
这是我的代码 AddDeal.js
export default class AddDeal extends React.Component {
constructor(props) {
super(props);
// Set the state
this.state = {
title: '',
description: '',
category: 'technology'
};
this.onSubmit = this.onSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
}
onSubmit(e) {
e.preventDefault();
alert('Title is: ' + this.state.title + 'Description is: ' + this.state.description + 'Category is: ' + this.state.category);
}
handleChange(e) {
this.setState({
title: e.target.title,
description: e.target.description,
category: e.target.value
});
}
render() {
return (
<div>
<h1>Add Deal</h1>
<form onSubmit={this.onSubmit}>
<label><input value={this.state.title} onChange={this.handleChange} type="text" name="title"/></label>
<label><input value={this.state.description} onChange={this.handleChange} type="text" name="description" /></label>
<select value={this.state.category} onChange={this.handleChange}>
<option value="technology">Technology</option>
<option value="food">Food</option>
<option value="drink">Drink</option>
<option value="books">Books</option>
</select>
<input type="submit" value="Submit"/>
</form>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这么难以获取投入?我应该使用道具而不是州吗?谢谢.
问题在于onChange function,您正在使用常见的onChange函数,因此不是使用相同的值更新所有更新特定的状态值.
使用此功能:
handleChange(e) {
this.setState({
[e.target.name] : e.target.value
});
}
Run Code Online (Sandbox Code Playgroud)
使用name属性更新特定状态,您需要定义name='category'with select字段.
检查工作示例:
class AddDeal extends React.Component {
constructor(props) {
super(props);
// Set the state
this.state = {
title: '',
description: '',
category: 'technology'
};
this.onSubmit = this.onSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
}
onSubmit(e) {
e.preventDefault();
alert('Title is: ' + this.state.title + 'Description is: ' + this.state.description + 'Category is: ' + this.state.category);
}
handleChange(e) {
this.setState({
[e.target.name] : e.target.value
});
}
render() {
return (
<div>
<h1>Add Deal</h1>
<form onSubmit={this.onSubmit}>
<label><input value={this.state.title} onChange={this.handleChange} type="text" name="title"/></label>
<label><input value={this.state.description} onChange={this.handleChange} type="text" name="description" /></label>
<select name='category' value={this.state.category} onChange={this.handleChange}>
<option value="technology">Technology</option>
<option value="food">Food</option>
<option value="drink">Drink</option>
<option value="books">Books</option>
</select>
<input type="submit" value="Submit"/>
</form>
</div>
);
}
}
ReactDOM.render(<AddDeal/>, document.getElementById('app'))Run Code Online (Sandbox Code Playgroud)
<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>
<div id='app'/>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |