Vuejs, вычисляемое свойство с компонентом замораживания установщика

У меня есть компонент с текстовым редактором tiptap. Я использую вычисляемое свойство с сеттером для привязки данных к редактору.

<template>
  <tiptap model="editNoteContent" extensions" />
</template>

<script>
export default {
  computed: {
    editNoteContent: {
      get() {
        return this.$store.state.Notes.currentNote.text;
      },
      set(text) {
        this.$store.commit("Notes/updateCurrentNoteText", text);
      },
    }
  },
}
</script>

Когда я быстро набираю много текста, мой компонент зависает. Я использую вычисляемое свойство, потому что мне нужно получить какой-то текущий текст и только потом его изменить. Кто-нибудь знает лучшую практику для такой ситуации? Как я могу решить эту проблему?

1 ответ

Решение

Распространенным решением проблемы этого типа является отклонение вызова, что задерживает событие обратного вызова. Например, вы можете отразить мутацию, используя clearTimeout() чтобы отменить все ожидающие звонки, а затем setTimeout() отложить $store.commit() вызов:

export default {
  computed: {
    editNoteContent: {
      get() { /*...*/ },
      set(text) {
        // cancel pending commits, if any
        clearTimeout(this._timer)

        // commit newest text after 300ms
        this._timer = setTimeout(() => {
          this.$store.commit("Notes/updateCurrentNoteText", text)
        }, 300)
      }
    }
  }
}
Другие вопросы по тегам