Медленное обновление Draft.js / react-draft-wysiwyg DOM при изменении содержимого

#javascript #redux-saga #draftjs #react-boilerplate #react-draft-wysiwyg

#javascript #redux-saga #draftjs #реагировать-шаблонно #react-draft-wysiwyg

Вопрос:

Я использую оболочку react-draft-wysiwyg для Draft.js . На странице у меня есть несколько экземпляров компонента Editor. У меня проблема с медленным обновлением пользовательского интерфейса редактора ( onChange обработчик событий). Возможно, это какой-то намек, я получаю много предупреждений в консоли [Violation] 'input' handler took <N>msA .

Скриншот от 2019-03-29 22-02-43

Моя настройка:

  • реагировать-шаблонно
  • react-draft-wysiwyg
  • сокращение
  • redux-saga
  • повторно выберите

Я отправляю действие для обработки изменения состояния редактора, которое обрабатывается redux-saga. 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));
  }
}
  

Мое состояние redux выглядит следующим образом:

 ...
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:

Я нашел решение своей проблемы. По крайней мере, некоторые ходят вокруг да около. Я изменил способ обработки действий в моей саге action watcher. Вместо takaLates эффекта я изменил на throttle с небольшой задержкой. И это намного, намного лучше.