Всем здрасьте. У меня приложение react-redux. Мне нужно подгрузить динамически обновляемые пропсы в один из компонентов (./popups/EditNotePopup.js) с своим стейтом. Так вот сейчас нужные пропсы подгружаются только при повторном вызове(при повторном нажатии кнопки editNote). Я подозреваю, что некорректно использую componentWillReceiveProps(). Подскажите, как сделать правильно и почему?
import React, { Component } from "react";
import $ from "jquery";
import { serialiseEditorStateToRaw } from "draftjs-conductor";
import {
EditorState,
ContentState,
convertFromHTML,
convertFromRaw
} from "draft-js";
import { convertToHTML } from "draft-convert";
import { DraftailEditor, BLOCK_TYPE, INLINE_STYLE } from "draftail";
import {
exporterConfig,
CustomIcon,
BR_ICON,
UNDO_ICON,
REDO_ICON
} from "../components";
import "draft-js/dist/Draft.css";
import "draftail/dist/draftail.css";
//для справки, если потребуется
[url]https://www.draftail.org/docs/controlled-component[/url]
[url]https://draftjs.org/docs/api-reference-content-state[/url]
export class EditNotePopup extends Component {
getContent = stringHTML => {
const blocksFromHTML = convertFromHTML(stringHTML);
const content = ContentState.createFromBlockArray(
blocksFromHTML.contentBlocks
);
return content;
};
state = { editorState: EditorState.createEmpty() };
onChange = editorState => this.setState({ editorState: editorState });
clearEditor = () => {
this.setState({ editorState: EditorState.createEmpty() });
};
componentWillReceiveProps() {
if (this.props.textEditedNote !== "") {
this.setState({
editorState: EditorState.createWithContent(
this.getContent(this.props.textEditedNote)
)
});
}
}
// for export text note toHTML
toHTML = raw =>
raw ? convertToHTML(exporterConfig)(convertFromRaw(raw)) : "";
render() {
return (
<div
id="modal-editNote"
className="modal fade"
tabIndex={-1}
role="dialog"
aria-labelledby="exampleModalCenterTitle"
aria-hidden="true"
>
<div className="modal-dialog modal-dialog-centered" role="document">
<div className="modal-content">
<div className="modal-header">
<h5 className="modal-title">EditNote</h5>
<button
type="button"
className="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">×</span>
</button>
</div>
<form
id="formEditNote"
onSubmit={ev => ev.preventDefault()}
className="needs-validation"
noValidate
>
<div className="modal-body">
<div className="form-label-group">
<label htmlFor="editTextNote">Text Note</label>
<DraftailEditor
editorState={this.state.editorState}
onChange={this.onChange}
}}
/>
</div>
</div>
<div className="modal-footer">
<button
onClick={() => {
$("#modal-editNote").modal("hide");
const idNote = this.props.idNote;
const editedTextNote = this.toHTML(
serialiseEditorStateToRaw(this.state.editorState)
);
this.props.editNote(idNote, editedTextNote);
this.clearEditor();
}}
type="button"
className="btn btn-success btn-block mt-3"
>
SAVE
</button>
</div>
</form>
</div>
</div>
</div>
);
}
}
link full project
https://codesandbox.io/s/noteeditors-co2pe