Медленное обновление DOM Draft.js / react-draft-wysiwyg при изменении содержимого
Я использую оболочку Reaction-draft-wysiwyg для Draft.js. На странице у меня есть несколько экземпляров компонента Editor. У меня проблема с медленным / медленным обновлением интерфейса редактора (onChange
обработчик события). Может быть, это какой-то намек, я получаю много предупреждений в консоли [Violation] 'input' handler took <N>msA
,
Моя настройка:
- реагируют-шаблонный
- реагировать черновик-WYSIWYG
- перевождь
- перевождь-эпопея
- повторно
Я диспетчеризирую действие, чтобы обработать состояние редактора, изменив его обработкой redux-saga. Сага проверит наличие нового контента и обновит магазин.
export function* handleOnEditorStateChange({ editorState, nameSpace }) {
const actualEditorState = yield select(selectAllEditorsContent());
const editorIndexToUpdate = actualEditorState.findIndex(
editors => editors.name === nameSpace,
);
const currentContent = actualEditorState[
editorIndexToUpdate
].state.getCurrentContent();
const newContent = editorState.getCurrentContent();
const hasEditorNewContent = newContent !== currentContent;
if (hasEditorNewContent) {
const updatedEditorState = [...actualEditorState];
updatedEditorState[editorIndexToUpdate].state = editorState;
yield put(storeEditorStateAction(updatedEditorState));
}
}
Мое состояние редукса выглядит так:
...
editors: [
{
name: 'editor1',
label: 'Editor 1',
state: {... _immutable - draftjs }
},
{
name: 'editor2',
label: 'Editor 2',
state: {... _immutable - draftjs }
},
]
...
Разбавление:
...
case STORE_EDITOR_STATE: {
const { content } = action;
return state.set('editors', content);
}
...
1 ответ
Я нашел решение для моей проблемы. По крайней мере, немного погулять. Я изменил способ обработки действий в своей саге о наблюдателях действий. Вместо takaLates
эффект, который я изменил на throttle
с небольшой задержкой. И это намного лучше.