Исходя из React, мне очень нравилось передавать деструктурированные реквизиты дочерним компонентам, я думал, что это делает компоненты чище и легче для чтения. Недавно я много работал во Vue и решил поделиться тем, как сделать то же самое, что и в React, но во Vue.

Тощий

<my-component v-bind="propsObjectIWantToSendToChild" />

Не такой уж и худой

Что делает v-bind?

Из документов:

Динамически привязать один или несколько атрибутов или свойство компонента к выражению.

Что это значит?

Мы знаем, что в HTML мы можем добавить класс в качестве атрибута.

<p class="my-class">Here is a p tag</p>

Но в Vue мы можем захотеть условно установить класс, используя какой-нибудь Javascript.

computed: { loadingClass() { return isLoading ? 'active' : ''; } } // template
<p v-bind:class="loadingClass">Here is a p tag</p>

Или мы можем использовать красивое сокращение, которое Vue дает нам для v-bind, удаляя v-bind и просто добавляя :class

<p :class="loadingClass">Here is a p tag</p>

Проходящий реквизит

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

<my-component :user-id="userId" :user-name="userName" />

Но иногда нам нужно передать больше, чем 1 или 2 реквизита, и становится немного сложно отслеживать и раздувать шаблон.

Вставить v-bind

Мы можем взять тот же компонент и сделать что-то вроде следующего.

// my_parent_component.vue
computed: { myProps() {
  return { userName: this.userName, userId: this.userId };
},
// template
<my-component v-bind="myProps" />

Затем в моем компоненте вы объявляете свои реквизиты, как и любой другой компонент:

// my_component.vue
props: {
  userId: {
    required: true,
    type: String,
  },
  userName: {
    required: true,
    type: String,
  },
},

Надеюсь, это поможет очистить ваши шаблоны, и вы чему-то научились.

Ресурсы

Первоначально опубликовано на https://scottistern.com 22 мая 2020 г.