您好我正在使用React 14并在ES6中编写它。我正在使用formsy-material-ui进行表单验证。有一种情况我想在单击按钮时清除文本字段的值。
我尝试了以下代码
<FormsyText
name="email"
ref="email"
validations="isEmail"
validationError="Invalid Email"
hintText="Email"
value={this.state.emailValue}
/>
点击按钮,我正在执行以下代码行
this.setState({emailValue : ''});
但是文本字段没有被清除。 如何清除它。 请帮助。
答案 0 :(得分:8)
因此,如果您使用受控输入(可能直接使用Material-ui中的TextField
) - 您的代码是正确的,但FormsyText
组件在内部处理它的值。
如果您传递了value
或defaultValue
,只会在呈现时使用它,您可以检查它here。
我只看到一种方法来以现实的方式清除价值。
this.refs.email.setState({ value: "" })
注意:我建议您更改使用ref
的方式。不推荐使用带字符串的refs,将来可能会将其删除。相反,你应该传递一个将接收该组件的函数。 https://facebook.github.io/react/docs/more-about-refs.html
例如:
<FormsyText
name="email"
ref={(node) => this._emailText = node}
validations="isEmail"
validationError="Invalid Email"
hintText="Email"
value={this.state.emailValue}
/>
//And to clear it
this._emailText.setState({ value: "" })
答案 1 :(得分:1)
在setState:
之后尝试重置字段this.setState({emailValue : ''});
this.refs.email.reset()
您也可以重置所有表单。
this.refs.form.reset()
答案 2 :(得分:0)
const formRefdeposit = useRef(null);
<Formsy
onValidSubmit={handleSubmit}
onValid={enableButton}
onInvalid={disableButton}
ref={formRef}
>
....Form Fields
</Formsy>
如果您的js文件中有类,请使用
this.formRef.current.reset();
如果没有课程,则使用
formRef.current.reset();