1
我有一个有3个字段的表格。前两个字段是email_from和email_subject,最后一个字段是编辑器。我已经使用了编辑器的draftjs。如果没有编辑器,我可以启用和禁用提交按钮,但由于包含编辑器,我不知道如何才能启用按钮,只有当所有的字段都填充没有错误。启用按钮只能提交所有的字段填写
这是我的代码。
AdminEditor是具有draftjs编辑
class EmailTemplate extends React.Component {
state = {
emailSubject: '',
emailFrom: ''
};
handleChange = event =>
this.setState({ [event.target.name]: event.target.value });
handleSubmit = event => {
event.preventDefault();
};
render() {
const { emailSubject, emailFrom } = this.state;
return (
<form onSubmit={this.handleSubmit}>
<FieldGroup
id="formControlsText"
name="emailSubject"
type="text"
label="Email Subject"
placeholder="Enter Email Form"
onChange={this.handleChange}
validationState={emailSubject ? 'success' : 'error'}
required
/>
<FieldGroup
id="formControlsText"
name="emailFrom"
type="email"
label="Email From"
placeholder="Enter Email From"
onChange={this.handleChange}
validationState={emailFrom ? 'success' : 'error'}
required
/>
<AdminEditor />
<Button type="submit">
Submit
</Button>
</form>
);
}
}
export default EmailTemplate;
class AdminEditor extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
editorState: EditorState.createEmpty(),
isEmpty: true
};
}
onEditorStateChange = editorState => {
this.setState({
editorState
});
};
onEditorChange = editorContent => {
this.setState({
editorContent
});
};
handleChange = event =>
this.state.editorState.getCurrentContent().hasText()
? this.setState({ isEmpty: false })
: this.setState({ isEmpty: true });
render() {
const { editorState } = this.state;
return (
<div>
<Editor
editorState={this.state.editorState}
initialContentState={rawContentState}
toolbarClassName="home-toolbar"
wrapperClassName="home-wrapper"
editorClassName="home-editor"
onEditorStateChange={this.onEditorStateChange}
toolbar={{
textAlign: { inDropdown: true },
}}
onContentStateChange={this.onEditorChange}
placeholder="write text here..."
onChange={this.handleChange}
/>
</div>
);
}
}
export default AdminEditor;
分量任何人都可以帮我吗?
感谢您的帮助。我知道了。 – milan
如果我将props editorIsEmpty传递给AdminEditor,然后检查它是否显示错误,那么将从渲染开始显示错误,但我希望在用户单击textarea时显示错误。 {editorIsEmpty &&'show error'} – milan
这样做的一种方法是'onFocus'(或者''onBlur''可能更好一些),在'AdminEditor'内设置一个状态变量,比如'touched:true'。然后在句柄中改变它将是'this.state.editorState.getCurrentContent()。hasText()&& this.state.touched'。让我知道,如果你需要更多的信息,我可以将它添加到更好的格式的答案。 –