Добавляет ли каждый дочерний элемент реактивные геттеры и сеттеры в реквизит?

#vue.js

#vue.js

Вопрос:

Представьте, что у вас есть огромный список дел:

 [
   {
     id: 1,
     name: Pet a cat,
     priority: 'extreme'
   },
   ...
]
  

Приложение состоит из трех компонентов grandparent -> parent -> child

Список задач объявляется в data функции дедушки и бабушки. Именно здесь список становится реактивным в первую очередь. Затем список передается от дедушки к родителю и от родителя к потомку в качестве реквизита. Из моего ограниченного понимания каждый компонент в цепочке добавляет свои собственные getters и setters . Меня беспокоит то, что этот способ передачи реквизита не является оптимальным для производительности. Я имею в виду, должен ли я реструктурировать свой код таким образом, чтобы минимизировать передачу таких реквизитов или нет?

Комментарии:

1. Есть несколько предостережений, которые могут укусить вас при передаче props через несколько уровней таким образом, если несколько уровней намерены манипулировать этими данными. Вообще говоря, если нескольким компонентам необходимо обрабатывать одни и те же данные, я предпочитаю использовать хранилище vuex вместо передачи реквизитов таким образом, чтобы у всех был один «источник истины»

2. @WesleySmith, я планирую выдавать события, чтобы только бабушка и дедушка могли решать, какие манипуляции с данными выполнять. Интересно, сколько вычислительной нагрузки добавляет этот подход

3. Это добавит нагрузку, будет несколько копий, хотя сомнительно, что вы когда-нибудь это заметите.

4. @WesleySmith, если бы вам нужно было угадать, насколько больше нагрузка по сравнению с подходом vuex?

5. @WesleySmith, спасибо, сэр! Хорошего дня и ночи!

Ответ №1:

Прежде всего, Props в Vue доступны только для чтения. Вы получите ошибку времени выполнения, если когда-либо попытаетесь ее обновить. Так что на самом деле нет сеттеров для родительских и дочерних компонентов, только для grand-parent.
Если ваши дочерние компоненты хотят его обновить, вам придется отправлять события до тех пор, пока какой-либо компонент не сможет фактически обновить данные.

Во-вторых, у вас не будет никаких проблем с производительностью, так работает Vue, и он хорош в этом. На самом деле это правильный и самый простой способ добиться того, чего вы хотите. Очевидно, что если список родительских / дочерних элементов расширится еще больше, вам будет сложно использовать только props events, но я не думаю, что проблема с производительностью.

Другим решением, позволяющим избежать передачи данных через каждый компонент-потомок, является использование «Хранилища Vuex». Однако новичкам это не так просто настроить и понять. Вы можете попробовать, если ваше приложение становится все более сложным.

Я бы посоветовал вам придерживаться вашего текущего решения, поскольку в нем нет ничего плохого.

Счастливого кодирования 🙂