Как применить проверку в draftjs
У меня есть форма, которая включает в себя электронную почту, тему и текст, который использует черновики для текстового редактора. Я мог бы проверить другие поля, но как я могу проверить редактор draftjs. Когда я нажимаю на редактор, чтобы напечатать, если он оставлен пустым, он должен показать ошибку в противном случае, как тот, что на скриншоте.
Вот мой код
function FieldGroup({ validationState, ...props }) {
console.log(props);
return (
<FormGroup validationState={validationState}>
<ControlLabel>{props.label}</ControlLabel>
<FormControl {...props} />
</FormGroup>
);
}
class EmailTemplate extends React.Component {
state = {
emailFrom: ''
};
handleChange = event =>
this.setState({ [event.target.name]: event.target.value });
render() {
const { templateName, emailSubject, emailFrom } = this.state;
return (
<form>
<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;
render() {
const { editorContent, contentState, editorState } = this.state;
return (
<div>
<Editor
editorState={this.state.editorState}
initialContentState={rawContentState}
wrapperClassName="home-wrapper"
editorClassName="home-editor"
onEditorStateChange={this.onEditorStateChange}
toolbar={{
history: { inDropdown: true },
inline: { inDropdown: false },
list: { inDropdown: true },
link: { showOpenOptionOnHover: true },
textAlign: { inDropdown: true },
image: { uploadCallback: this.imageUploadCallBack }
}}
onContentStateChange={this.onEditorChange}
placeholder="write text here..."
spellCheck
/>
</div>
);
}
2 ответа
Вы можете использовать
editorState.getCurrentContent().hasText()
чтобы проверить, ввел ли пользователь какой-либо текст в редакторе, и соответствующим образом применить ваш стиль.
Вы можете использовать onBlur
а также onFocus
событие мыши в draft.js.
onBlur
handle будет проверять содержимое редактора, когда пользователь покидает редактор и щелкает в другом месте. если содержимое редактора пусто, то устанавливаетсяeditorValidated
как ложь в состоянии.onFocus
ручка всегда будет установленаeditorValidated
как правда. Таким образом, когда пользователь снова начинает печатать, ошибки не возникает.
в Editor
компонент, который вы можете использовать editorValidated
чтобы добавить свой собственный стиль с помощью классов css.
function FieldGroup({ validationState, ...props }) {
console.log(props);
return (
<FormGroup validationState={validationState}>
<ControlLabel>{props.label}</ControlLabel>
<FormControl {...props} />
</FormGroup>
);
}
class EmailTemplate extends React.Component {
state = {
emailFrom: '',
editorValidated:true,
};
handleChange = event =>
this.setState({ [event.target.name]: event.target.value });
render() {
const { templateName, emailSubject, emailFrom } = this.state;
return (
<form>
<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;
render() {
const { editorContent, contentState, editorState } = this.state;
return (
<div>
<Editor
editorState={this.state.editorState}
initialContentState={rawContentState}
wrapperClassName="home-wrapper"
editorClassName=`home-editor ${(this.state.editorValidated)?'validated','not-validated'}`
onEditorStateChange={this.onEditorStateChange}
toolbar={{
history: { inDropdown: true },
inline: { inDropdown: false },
list: { inDropdown: true },
link: { showOpenOptionOnHover: true },
textAlign: { inDropdown: true },
image: { uploadCallback: this.imageUploadCallBack }
}}
onFocus={()=>{this.setState({editorValidated:true})}}
onBlur={()=>{this.setState({editorValidated:(this.state.editorState.getCurrentContent().getPlainText()!='')})}}
onContentStateChange={this.onEditorChange}
placeholder="write text here..."
spellCheck
/>
</div>
);
}