我遇到了一个相当愚蠢的问题。我正在创建我的第一个React应用程序,我遇到了一个小问题,在我提交表单后,我无法清除我的输入值。A尝试在Google上搜索这个问题,在这里找到了一些类似的线程,但我无法解决这个问题。我不想更改我的组件/应用程序的状态,只是为了将input的值更改为空字符串。我尝试清除onHandleSubmit()
函数中input的值,但得到了一个错误:
“无法设置未定义”的属性“值”。
我的搜索栏组件:
import React, { Component } from "react";
class SearchBar extends Component {
constructor(props) {
super(props);
this.state = {
city: ""
};
this.onHandleChange = this.onHandleChange.bind(this);
this.onHandleSubmit = this.onHandleSubmit.bind(this);
}
render() {
return (
<form>
<input
id="mainInput"
onChange={this.onHandleChange}
placeholder="Get current weather..."
value={this.state.city}
type="text"
/>
<button onClick={this.onHandleSubmit} type="submit">
Search!
</button>
</form>
);
}
onHandleChange(e) {
this.setState({
city: e.target.value
});
}
onHandleSubmit(e) {
e.preventDefault();
const city = this.state.city;
this.props.onSearchTermChange(city);
this.mainInput.value = "";
}
}
export default SearchBar;
9条答案
按热度按时间cygmwpex1#
您有一个受控组件,其中
input
值由this.state.city
决定。因此,一旦您提交,您必须清除您的状态,这将自动清除您的输入。gcxthw6b2#
由于输入字段是受控元素,因此无法在不修改状态的情况下直接更改输入字段值。
也在
this.mainInput
不引用输入,因为mainInput是id
,您需要指定一个对输入的引用在你当前的状态下最好的方法就是清除状态来清除输入值
但是,如果出于某种原因,即使表单已提交,您仍希望将值保持在状态中,则最好使输入不受控制
并更新状态
onChange
和onSubmit
中的值使用ref
清除输入话虽如此,我看不出保持状态不变有什么意义,所以第一个选项应该是要走的路。
bzzcjhmw3#
this.mainInput
实际上并不指向任何东西,因为你使用的是一个受控组件(即input的值是从state获得的),所以你可以将this.state.city
设置为null:oyjwcjzk4#
在
onHandleSubmit
函数中,再次将状态设置为{city: ''}
,如下所示:92vpleto5#
如果您想清除表单的字段,并且您使用的是组件函数而不是类组件,您可以很容易地做到这一点,假设我们在表单标题、价格和日期中有三个输入,我们希望在从用户那里获得这些值后清除字段
aydmsdu96#
上面的答案是不正确的,他们都将运行天气或不提交是成功的...你需要写一个错误组件,将接收任何错误,然后检查是否有错误的状态,如果没有,然后清除表单...
使用. then()
示例:
};
628mspwn7#
这是我想要清除并在状态1st STEP中创建的值
为按钮或您想要的创建submitHandler函数第三步
这是清除功能最终步骤
当点击按钮模板代码清除时,第二步
drkbr07n8#
使用useState挂接清除字段
cs7cruho9#
我不知道5年前会发生什么,但现在如果你的标签是这样的,请确保使用值属性。
比你可以用这个伎俩达到的效果
快乐编码:)