vue Flashcards

1
Q

Vue. Virtual dom и механизм отрисовки. Компонентный подход

A

Путь рендоринга в vue :
Template => rendering function (могут изменяться в зависимости от изменения состояния components, state) => virtual dom => actual dom

В virtual dom используются следующие механизмы отрисовки:
1. Static Hoisting - если часть template не содержит никаких динамических изменений, сравнивать нужно их перерисовывать или нет не нужно. они статичны и будут возвращать одно и то же.
2. При динамическом содержимом тега или класса или id в virtual dom этому элементу будет присвоен соответствующий flag обновления и обновляется только этот например класс без перерисовки всего дерева.
Перерисовака происходит пачкой

Компонтный подход - все приложение делим на компоненты и их переиспользуем

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Vue реактивность.
  2. Как обновляется DOM в реактивном state . nextTick.
  3. отличие ref от reactive
A
  1. Это когда мы изменили данные в data и сразу видим изменения в этом объекте на странице. объект data обернут в proxy с ловушками для set, при изменении объекта происходит перерендеринг.
    Если мы деструктуризируем свойство реактивного обекта переменной, то это свойство уже не будет реактивным.

2.Когда ты обновляешь реактивный state, Dom обновляется автоматически. Но изменения вносимые в реактивный state не обновляются сразу, а накапливаются и вносится через промежуток времени. чтобы внести изменения незамедлительно используют await nextTick().

3.отличие ref от reactive
1. ref можно использовать для получения состояния dom элемента.
ref это объект с полем _value.
2. reactive. с reactive мы получаем proxy без оберточного объекта.
Ограничения reactive
1. При деструктуризации свойства это свойство уже не реактивно.
2. работает только с object

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

SFC

A

single file component - модель создания компонента, содержат 3 секции -
template (разметка)
script (логика, функции b тд. должны экспортировать объект)
style

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Двусторонее связывание. Способы двустороннего связывания

A

Это связывание графического интерфейса с данными. Например связываем value инпута с значением data email или password. Таким образом мы добиваемся синхронизации данных с визуальным отображением.


(1)
<input :value = “inputValue” @input=”inputValue = $event.target.value”>

(2)
<input></input>

<script>
data() {
return {
inputValue: ""
}
}
...
</script>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Сокращение и разное

A

props - пропсы которые прокидываются в компоненту, есть поля type и required

Короткая и полная запись
v-on:click —— @click
v-bind:posts —— :posts

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Передача данных на уровень вверх.
$emit

A

Передача данных из ребенка в родительский компонент возможна путем создания события в ребенке. А из родительского элемента мы подписываемся на это событие.

this.$emit(‘create’, this.post) - (имя и
данные передаваемые с событием)

в родительском компоненте подписываемся на событие @create (имя такое же как и в emit)
@create = ‘createPost’

methods:{
// вызываем функцию которая была прописана в событии @create
createPost(post) {
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Отличия с реакт

A

Если мы написали логику к компоненту (например @click, @input @bind и тд) то все это будет применяться в вверхнему элементу компонента

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Глобальная и локальная регистрация компонента

A

В vue компоненты для использования нужно импортировать. Можно их импортировать глобально и локально. Для импорта глобально регистрируем компоненты с помощью app.component(
‘MyComponent’, //component-name
ComponentImport //component
)

Минусы:
- Глобальная регистрация не позволяет системам сборки удалять неиспользуемые компоненты (т. н. «tree-shaking»). Если вы глобально регистрируете компонент, но в конечном итоге не используете его нигде в своем приложении, он все равно будет включен в конечный пакет.
- глобальная регистрация затрудняет чтение и нахождение нужного компонента, который мы подключили

(можно писать в синтаксисе как <PascalCase></PascalCase> так и <kebab-case>)</kebab-case>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

v-show и v-if

A

v-show это тот же v-if. Только v-show не убирает элемент из dom дерева, а добавляет свойство display:none

Если используем v-show, затем нельзя использовать v-else, только другой v-show

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

жизненный цикл компонента

A

Компоненты в vue имеют определенные этапы. К этим этапам мы можем подключиться и выполнить какой-либо код.

Можно выделить этап beforeCreate, created, beforeMount, mounted, beforeUpdate, update, beforeUnmount, unmount

хук представляет собой обычную функцию

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Наблюдаемые свойства и вычисляемые свойства (watch(watchEffect) и computed)

A

Watch и computed это аналог useEffect и useMemo в react. computed запоминает результат вычисления функции, вызывается заново только когда какая-либо зависимость изменилась.
функция в наблюдателе (watch) должна иметь такое же название что и модель в data.

Watch используем если нужно выполнение side-effect или изменения стейта. Аналог useEffect.
{deep:true} запускать watcher при глубоком изменении объекта.
{immediate: true} аналог useLauoutEffect
{ once: true } - запускает watcher раз

watchEffect - автоматически запускается при изменении зависимостей

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

router-view, router link

A

router-view - component для роутинга который отрисовывает routes в src/router/router.js
router-link - Это как <link></link>, позволяет динамически обновлять страницу, без ее перезагрузки (как тег <a></a>)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

1 директивы.
2 Модификаторы директив
3 пользовательские директивы.
4 Аргументы в пользовалельской директиве

A

1————–
Это специальные атрибуты html тегами которые мы можем использовать. позволяет добавить дополнительную функциональность и сократить кол-ва кода
v-bind:href=’url’
Также можно делать директивы с динамическими аргументами:
:[attributeName]=”url”
Динамическими аргументы не нужно писать с большой буквы, тк они будут преобразованы в аргументы с маленькой буквой
<a :[someAttr]=”value”> … </a>
будет преобразованно в :[someattr]

2————–
Модификаторы это дополнение для директивы которое может добавить дополнительное поведение для этой директивы.
Самые популярные это .stop (stop propogation) и .prevent (preventDefault)
@click.stop =

v-model.trim-пробелы в начале и в конце строки удаляются
v-model.lazy - выполняет код после onChange. по дефолту onInput
v-model.number - значение приобразовываеся в число
3———————————–
Пользовательские директивы применяют когда нам нужна логика для манипуляции с DOM этого элемента.
Дополнительный функционал вносится на разных этапах жизненного цикла компоненты.
Пользовательские директивы можно объявить как локалььно так и глобально. В Component api если директива начинается с v это будет воспринято как пользовательская директива


const vHighlight = {
mounted: (el) => {
el.classList.add('is-highlight')
}
}

<template>
<p>This sentence is important!</p>
</template>

Глобальное объявление
app.directive(‘highlight’, {
/* … */
})

4———————————
const vCustomDirective = {
created(el, binding, vnode, prevNote) {}}
el - элемент dom
binding - объект который содержит
value, oldValue, arg, modifiers

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

миксины в vue

A

это переиспользуемые
{
data: ‘ ‘,
methods: ‘ ‘,
computed: ‘ ‘,
watch: ‘ ‘,
}.
при добавление миксины в компонент происходит слияние миксина с компонентом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

сторонние модули vue

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

composition api, hooks

A

Позволяет добиться переиспользуемости кода и хранить данные отдельно от компонента.

17
Q

props

A

Это какие-либо параметры которые может принимать компонент. Можем использовать в любом месте компонента. C помощью пропсов мы можем передавать данные от родительских компонентов в дочерние

18
Q

отличия v-modal в 2 и 3 версии

A

vue 2
один v-modal связывается по умолчанию с value
собыеи onInput()

в дочернем компоненте должны эмитить ‘input’
this.$emit(‘input’,newValue)

vue 3
можно привязывать как к value, так и к другим атрибутам. по умолчанию связывается с moduleValue, в отличии от value
v-model – modelValue
v-model:title – title
v-model:body – body
v-model:email – email

в дочернем компоненте
this.$emit(‘update:title’,newValue)
this.$emit(‘update:body’,newValue)
this.$emit(‘update:email’,newValue)

19
Q

как организовать постраничную навигацию в vue

A

используем библиотеку vue-router. можем создать роуты и масив маршрутов. в нем указываем путь и компонент. после чего этот роутер регистрируем в app. затем монтируем компонент router-view в корневом компоненте для применения роутов.

20
Q

Особенности слежения за глубокимми объектами (за изменением полей объекта, за изменением вложенных объектов)
deep watcher

A

При изменении вложенного объекта в data watch не отрабатывает. для этого и нужно глубокое слежение deep. Первым аргументом пишем отслеживаемый обект, 2-каллбек, 3 явно указываем deep true

watch(
() => state.someObject,
(newValue, oldValue) => {
// Note: newValue will be equal to oldValue here
// unless state.someObject has been replaced
},
{ deep: true }
)

21
Q

Интерполяция

A

это связь между элементами веб страницы и данными обекта vue. данные заключаются в двойные к
скобки
{{name}}

22
Q

Как передать данные из родителя в доч компонент не использую props и глобальный стейт

A

Используем механизм provide - inject. Аналог provide consume в react . В род комп provide, в дочернем inject

23
Q

что такое slot в vue

<slot></slot>

A

Слот это аналог child в react

24
Q

keap-alive во vue

A

это тег в template разметке, он нужен чтобы компонент не размонтировался при его не отображении на странице и сохранял свой стейт

25
Q

как создать свой плагин во vue

A

нужно создать объект с методом install

26
Q

совместное использование v-if и v-for

A

не использовать на одном элементе

27
Q

Динамический рендеринг компоненты

A

с помощью is. :is=”tabs[currentTab]”

28
Q

Кон

A