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'。讓我知道,如果你需要更多的信息,我可以將它添加到更好的格式的答案。 –