由于React在浏览器显示的是虚拟的DOM,我们在表单输入值后直接提交,是无法获取到这个值的。对此,官方给出的解决办法是:先把输入的值存放在组件的状态(state)中,之后通过状态的改变更新页面内容,从而显示出正确的值,用户提交的也是从state里获取的表单的value。
1 | constructor() { |
设置提交方法和改变state的状态的方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23handleSubmit(event) {
//阻止表单默认提交
event.preventDefault();
let item = this.state.item;
axios.post(host + 'xxx/insert', item).then(
response => {
let message = response.data;
if (message === 'success') {
alert("插入成功");
window.location.href = '/xxx/list';
} else {
alert("插入失败,请重试");
}
}
);
this.setState({item:item})
}
changeValue(event) {
let newItem = this.state.item;
newItem[event.target.name] = event.target.value;
this.setState({item: newItem})
}
1 | <form method={'post'} onSubmit={this.handleSubmit.bind(this)}> |
注:form中用onSubmit替代action,其中每个input的name需要对应定义state时的状态,在使用axios调接口传值时,如果是java的springmvc的后端,需要将传输的属性与对应的实体类对接好。