SlideShare a Scribd company logo
Борисенко Андрей, веб-разработчик
Магия Vue.js
и почему это лучше,
чем Реакт
Борисенко Андрей, seigiard@gmail.com
Борисенко Андрей
Занимаюсь веб-разработкой с 2000 года.
Умею верстать под пятый Эксплорер.
Пишу на джаваскрипт.
Проектирую интерфейсы.
Почта: seigiard@gmail.com
Скайп: seigiard
Создан в 2012 г.
Поддерживается Фейсбуком.
67000 звезд на Гитхаб за 5 лет.
Реакт используют все и везде вокруг.
Реакт компонентный — это удобно.
Реакт быстрый — это важно.
Реакт показал, как можно работать.
Реакт
Реакт — это только представление. Собери свой велосипед!
Реакт — это JSX. Смешай джаваскрипт с «версткой»!
Реакт — мы ни слова не говорим про стили!
Реакт — это компоненты. Много компонентов. Ещё больше компонентов!
Реакт — это очень излишне непомерно избыточно раздутый код. Местами.
Реакт
Vue.js
/vjuː/
Китайская модель познания мира
Скопируй, повтори, улучши
Создан в 2014 г., переписан в 2016 г.
Поддерживается Алибаба Груп.
54000 звезд на Гитхаб за 3 года.
Под мобильные Виикс (Weex).
Используют Вью:
GitLab, Laravel, CodeShip, PageKit...
История развития Вью
Звёзды на гитхабе: Реакт, Вью
Хуки жизненного цикла компонента
Вью
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed
Реакт
constructor
componentWillMount
componentDidMount
componentWillReceiveProps
componentWillUpdate
componentDidUpdate
componentWillUnmount
Инициализация компонента
Создание компонента
Перед началом монтирования
Компонент смонтирован
Перед обновлением компонента
Компонент обновлён
Перед удалением компонента
Компонент удалён
Компоненты
Компоненты в Реакте
class HelloWorld extends React.Component {
let items = null;
if (this.props.items) {
items = (<ul>
{this.props.items.map(item =>
<li key={item.id}>{item.name}</li>
)}
</ul>);
}
render() {
return <div>
<h1>Hello {this.props.name}!</h1>
{this.props.items ? items : <p>No items found</p>}
</div>;
}
}
Логика может быть
размазана по всему
компоненту.
Логика может быть спрятана
в рендер-функции.
Компоненты во Вью: всё в одном файле
<template>
<h1>Hello {{name}}!</h1>
</template>
<style>
h1 { color: red }
</style>
<script>
export default {
data() => {
name: ‘World’
}
}
</script>
Компонент состоит
из трёх явных частей:
- Шаблон
- Стили
- Логика
Компоненты во Вью: всё по файлам
<template>
<h1>Hello {{name}}!</h1>
</template>
<style src="./hello.css" scoped></style>
<script src="./hello.js"></script>
Опции компонента
export default {
data() {
return { … }
},
props: [ 'name' ],
computed: {
value() { … }
},
watch: {
value() { … }
},
methods: {
onClick() { … }
}
}
Данные компонента
Пропсы, ожидаемые в компоненте
Вычисляемые свойства
Наблюдаемые свойства
Методы компонента
Опции компонента: пропсы
// Простая форма записи
{
props: ['size', 'myMessage']
}
{
props: {
// только проверка типа
height: Number,
// проверка типа и другие правила валидации
age: {
type: Number,
default: 0,
required: true,
validator: x => x >= 0
}
}
}
Атрибуты компонента,
по которым приходят данные
из родительского
компонента.
Опции компонента: вычисляемые свойства
{
data: {
a: 1
},
computed: {
aDouble() {
return this.a * 2
}
}
}
this.a; // 1
this.aDouble; // 2;
Свойства, зависящие
от других свойств.
Опции компонента: наблюдатели
{
data: { a: 1 },
watch: {
// реагирует на изменение a:
a(value, oldValue) {
console.log(
'новое значение: %s, старое значение: %s',
val,
oldVal
);
}
}
}
this.a = 2; // → новое значение: 2, старое значение:
1
Объект, ключи которого —
это свойства для
наблюдения,
а значения — функции,
вызываемые при изменении.
Опции компонента: методы
{
data: { a: 1 },
methods: {
plus: function () {
this.a++
}
}
}
this.a; // 1
this.plus();
this.a; // 2
Вся методы, например
обработка событий,
хранятся здесь.
Стили
Стили в Реакт: инлайн
const headerStyle = {
color: 'red',
fontSize: '24px'
};
class HelloWorld extends React.Component {
render() {
return <h1 style={headerStyle}>
Hello World!
</h1>;
}
}
Нет медиа-выражений.
Нет ховера и фокуса.
Нет псевдоэлементов.
Стили в Реакт: инлайн
const headerStyle = {
color: 'red',
fontSize: '24px',
// Это невозможно понять,
это можно только запомнить.
WebkitTransition: 'all', // тут большая 'W' важна
msTransition: 'all' // а 'ms' уже маленькая
};
class HelloWorld extends React.Component {
render() {
return <h1 style={headerStyle}>
Hello World!
</h1>;
}
}
Стили в Реакт: инлайновая боль
import styles from "./hello-world.css";
class HelloWorld extends React.Component {
render() {
return <h1 style={styles.headerStyle}>
Hello World!
</h1>;
}
}
Стили в Реакт: react-css-modules
Стили в Реакт: styled-components
const RedTitle = styled.h1`
color: red;
fontSize: 24px;
`;
class HelloWorld extends React.Component {
render() {
return <RedTitle>
Hello World!
</RedTitle>;
}
}
Стили в Вью
<template>
<h1>
Hello World!
</h1>
</template>
<style>
h1 {
color: red;
}
</style>
// template
<h1>
Hello World!
</h1>
// style.css
h1 {
color: red;
}
Стили в Вью: компонентный подход
<template>
<h1>
Hello World!
</h1>
</template>
<style scoped>
h1 {
color: red;
}
</style>
// template
<h1 data-v-f3f3eg9>
Hello World!
</h1>
// style.css
h1[data-v-f3f3eg9] {
color: red;
}
Стили в Вью: CSS модули
<template>
<h1 v-bind:class=”$style.red”>
Hello World!
</h1>
</template>
<style modules>
.red {
color: red;
}
</style>
// template
<h1 class=”_1VyoJ-uZOjlO_0”>
Hello World!
</h1>
// style.css
h1._1VyoJ-uZOjlO_0 {
color: red;
}
Шаблоны
Шаблон в Реакте, наверное, где-то тут
return <div>
{props.isLoggedIn
? <UserGreeting/>
: <GuestGreeting />
}
</div>
return <div>
{state.array
.map((s,i) => <span key={i}>{s}</span>)
}
</div>
return <div>{myAwesomeTemplate}</div>
Можно в представлении
засунуть много логики.
Можно размазать
представление по коду
компонента.
Легко запутаться и запутать
других.
Шаблон во Вью
<template>
<div>
<user-greeting v-if=”isLoggedIn”/>
<guest-greeting v-else />
<span v-for=”i in Array(level).fill(0)” :key=”i”/>{{i}}</span>
</div>
</template>
Валидный HTML — валидный шаблон.
Директивы, как управление логикой отображения.
Можно использовать JSX или сразу функцию render.
Директивы — это синтаксический сахар
<nav>
<a v-if="signedIn">logout</a>
<a v-else>login</a>
</nav>
function render() {
with(this) {
return _c('nav', [
(signedIn)
? _c('a', [_v("logout")])
: _c('a', [_v("login")])
]);
}
}
https://vuejs-tips.github.io/compiler/#v-else
Двунаправленное связывание в Реакте
class Hello extends React.Component {
state = { name: 'World' }
change(e) {
this.setState({ name: e.target.value });
}
render() {
const { name } = this.state;
return
<div>
Name: <input value={name}
onChange={this.change.bind(this)} />
<br/>
Hello {name}!
</div>;
}
}
Двунаправленное связывание во Вью
<template>
<div>
Name: <input v-model='name' />
<br/>
Hello {{name}}!
</div>
</template>
<script>
export default {
data() {
return { name: 'World' }
}
}
</script>
Двунаправленное связывание во Вью
<template>
<div>
Name: <input
v-bind:value='name'
v-on:input='name = $event.target.value'
/>
<br/>
Hello {{name}}!
</div>
</template>
Двунаправленное связывание во Вью. С
рюшечками.
<template>
<div>
Name: <input-length v-model='name' />
<br/>
Hello {{name}}!
</div>
</template>
Компонент с поддержкой v-model:
— принимает входной параметр value
— порождает событие input с новым значением
Управление состоянием
Управление состоянием в Реакт: Редакс
Явно связываем
стэйт и пропсы.
Явно объявляем экшены
для диспатчеров.
Управление состоянием в Реакт: Мобикс
Явно указываем, за какими
свойствами стора
следим в компоненте.
Все экшены доступны.
Чуть больше магии
обсерверов.
Управление состоянием во Вью: Вьюикс (Vuex)
Весь стэйт доступен.
Все экшены доступны.
Магия обсерверов на 100%
Магия Вью
Реактивность Вью
Магия Вью
export default {
data() {
return {
someObject: {}
}
}
});
Каждое свойство объекта
превращается
в пару геттер/сеттер
с помощью волшебства
Object.defineProperty.
Методы массива
перехватываются,
чтобы включить уведомление
об изменениях массива.
Магия Вью: массивы
export default {
data() {
return {
someArray: []
}
}
});
Магия Вью: вычисляемые свойства
{
data: { a: 1 },
computed: {
// свойство только возвращает данные:
aDouble() {
return this.a * 2
},
// свойство и возвращает, и получает данные:
aPlus: {
get() { return this.a + 1 },
set(v) { this.a = v − 1 }
}
}
}
this.a; // 1
this.aPlus // 2;
this.aPlus = 5;
this.a; // 4
this.aDouble; // 8;
Свойства кешируются
и повторно вычисляются
только при изменении
реактивных зависимостей.
Скорость Вью и Реакт
Вью на ≈10% быстрее Реакта в сырой производительности рендеринга
и обновления страницы.
http://www.stefankrause.net/wp/?p=431
Реакт отлично оптимизируется вручную, а Вью позволяет сосредоточиться
на написании кода.
Преимущества Вью
Преимущества Вью
Вью — коробочная система для одностраничных приложений.
Вью стремительно развивается.
Файл компонента выглядит понятно.
Удобная работа с шаблонами и стилями.
Небольшая щепотка синтаксического сахара.
У Вью настоящая реактивность под капотом.
Вью изумительно прост.
Берём гибкую систему Ubuntu
Настраиваем только под себя AwesomeWM
А можно просто работать MacOS
Документация Вью
https://vuejs.org/
https://router.vuejs.org/
https://vuex.vuejs.org/
https://vue-loader.vuejs.org/
https://github.com/vuejs/awesome-vue
Прекрасная документация Вью,
которую приятно читать.
Роутер для Вью.
Вьюэкс — хранилище данных.
Как работает лоадер во Вью.
Сборник решений, плагинов и т.п.
Выводы
Работайте с тем, что
знаете.
Работайте с тем, что
знаете.
Изучайте новое.
Работайте с тем, что
знаете.
Изучайте новое.
Задавайте вопросы.
Работайте с тем, что
знаете.
Изучайте новое.
Задавайте вопросы.Борисенко Андрей, seigiard@gmail.com

More Related Content

What's hot

Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
EatDog
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
В помощь разработчику: мини-анализатор кода
В помощь разработчику: мини-анализатор кодаВ помощь разработчику: мини-анализатор кода
В помощь разработчику: мини-анализатор кода
Andrey Karpov
 
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Yandex
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
Andrei Solntsev
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в CheckoutMagecom Ukraine
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
Vladimir Rudnyh
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
Eugene Zharkov
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
CocoaHeads
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
MoscowDjango
 
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Yandex
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
Bohdan Danyliuk
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Agile Instrumentation
Agile InstrumentationAgile Instrumentation
Agile Instrumentation
Mikalai_Kardash
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
Mail.ru Group
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Yandex
 

What's hot (20)

Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
В помощь разработчику: мини-анализатор кода
В помощь разработчику: мини-анализатор кодаВ помощь разработчику: мини-анализатор кода
В помощь разработчику: мини-анализатор кода
 
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в Checkout
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Render API.
Render API.Render API.
Render API.
 
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Agile Instrumentation
Agile InstrumentationAgile Instrumentation
Agile Instrumentation
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»
 

Similar to Andrew Borisenko "Magic of Vue.js""

Vuejs composition API
Vuejs composition APIVuejs composition API
Vuejs composition API
Michail Kuznetsov
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
it-people
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
MoscowJS
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7Technopark
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
OdessaJS Conf
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
Yandex
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Alexander Byndyu
 
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10
OdessaFrontend
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
JSib
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.js
Max Klymyshyn
 
Yii2
Yii2Yii2
Yii2
Noveo
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Ontico
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014Andrey Listochkin
 
Rules - правила без исключений
Rules - правила без исключенийRules - правила без исключений
Rules - правила без исключений
zabej
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
DevDay
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 

Similar to Andrew Borisenko "Magic of Vue.js"" (20)

Vuejs composition API
Vuejs composition APIVuejs composition API
Vuejs composition API
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.js
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Yii2
Yii2Yii2
Yii2
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014
 
Rules - правила без исключений
Rules - правила без исключенийRules - правила без исключений
Rules - правила без исключений
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 

More from OdessaJS Conf

'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
OdessaJS Conf
 
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
OdessaJS Conf
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
OdessaJS Conf
 
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
OdessaJS Conf
 
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
OdessaJS Conf
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
OdessaJS Conf
 
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
OdessaJS Conf
 
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
OdessaJS Conf
 
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні..."NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
OdessaJS Conf
 
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
OdessaJS Conf
 
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
OdessaJS Conf
 
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
OdessaJS Conf
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
OdessaJS Conf
 
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
 'MICROFRONTENDS WITH REACT' by Liliia Karpenko 'MICROFRONTENDS WITH REACT' by Liliia Karpenko
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
OdessaJS Conf
 
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
OdessaJS Conf
 
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
OdessaJS Conf
 
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
OdessaJS Conf
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
OdessaJS Conf
 
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
OdessaJS Conf
 

More from OdessaJS Conf (20)

'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
 
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
 
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
 
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
 
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
 
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
 
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні..."NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
 
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
 
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
 
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
 
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
 'MICROFRONTENDS WITH REACT' by Liliia Karpenko 'MICROFRONTENDS WITH REACT' by Liliia Karpenko
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
 
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
 
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
 
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
 
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
 

Andrew Borisenko "Magic of Vue.js""

  • 1. Борисенко Андрей, веб-разработчик Магия Vue.js и почему это лучше, чем Реакт Борисенко Андрей, seigiard@gmail.com
  • 2. Борисенко Андрей Занимаюсь веб-разработкой с 2000 года. Умею верстать под пятый Эксплорер. Пишу на джаваскрипт. Проектирую интерфейсы. Почта: seigiard@gmail.com Скайп: seigiard
  • 3. Создан в 2012 г. Поддерживается Фейсбуком. 67000 звезд на Гитхаб за 5 лет. Реакт используют все и везде вокруг. Реакт компонентный — это удобно. Реакт быстрый — это важно. Реакт показал, как можно работать. Реакт
  • 4.
  • 5. Реакт — это только представление. Собери свой велосипед! Реакт — это JSX. Смешай джаваскрипт с «версткой»! Реакт — мы ни слова не говорим про стили! Реакт — это компоненты. Много компонентов. Ещё больше компонентов! Реакт — это очень излишне непомерно избыточно раздутый код. Местами. Реакт
  • 9. Создан в 2014 г., переписан в 2016 г. Поддерживается Алибаба Груп. 54000 звезд на Гитхаб за 3 года. Под мобильные Виикс (Weex). Используют Вью: GitLab, Laravel, CodeShip, PageKit... История развития Вью Звёзды на гитхабе: Реакт, Вью
  • 10. Хуки жизненного цикла компонента Вью beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed Реакт constructor componentWillMount componentDidMount componentWillReceiveProps componentWillUpdate componentDidUpdate componentWillUnmount Инициализация компонента Создание компонента Перед началом монтирования Компонент смонтирован Перед обновлением компонента Компонент обновлён Перед удалением компонента Компонент удалён
  • 12. Компоненты в Реакте class HelloWorld extends React.Component { let items = null; if (this.props.items) { items = (<ul> {this.props.items.map(item => <li key={item.id}>{item.name}</li> )} </ul>); } render() { return <div> <h1>Hello {this.props.name}!</h1> {this.props.items ? items : <p>No items found</p>} </div>; } } Логика может быть размазана по всему компоненту. Логика может быть спрятана в рендер-функции.
  • 13. Компоненты во Вью: всё в одном файле <template> <h1>Hello {{name}}!</h1> </template> <style> h1 { color: red } </style> <script> export default { data() => { name: ‘World’ } } </script> Компонент состоит из трёх явных частей: - Шаблон - Стили - Логика
  • 14. Компоненты во Вью: всё по файлам <template> <h1>Hello {{name}}!</h1> </template> <style src="./hello.css" scoped></style> <script src="./hello.js"></script>
  • 15. Опции компонента export default { data() { return { … } }, props: [ 'name' ], computed: { value() { … } }, watch: { value() { … } }, methods: { onClick() { … } } } Данные компонента Пропсы, ожидаемые в компоненте Вычисляемые свойства Наблюдаемые свойства Методы компонента
  • 16. Опции компонента: пропсы // Простая форма записи { props: ['size', 'myMessage'] } { props: { // только проверка типа height: Number, // проверка типа и другие правила валидации age: { type: Number, default: 0, required: true, validator: x => x >= 0 } } } Атрибуты компонента, по которым приходят данные из родительского компонента.
  • 17. Опции компонента: вычисляемые свойства { data: { a: 1 }, computed: { aDouble() { return this.a * 2 } } } this.a; // 1 this.aDouble; // 2; Свойства, зависящие от других свойств.
  • 18. Опции компонента: наблюдатели { data: { a: 1 }, watch: { // реагирует на изменение a: a(value, oldValue) { console.log( 'новое значение: %s, старое значение: %s', val, oldVal ); } } } this.a = 2; // → новое значение: 2, старое значение: 1 Объект, ключи которого — это свойства для наблюдения, а значения — функции, вызываемые при изменении.
  • 19. Опции компонента: методы { data: { a: 1 }, methods: { plus: function () { this.a++ } } } this.a; // 1 this.plus(); this.a; // 2 Вся методы, например обработка событий, хранятся здесь.
  • 21. Стили в Реакт: инлайн const headerStyle = { color: 'red', fontSize: '24px' }; class HelloWorld extends React.Component { render() { return <h1 style={headerStyle}> Hello World! </h1>; } }
  • 22. Нет медиа-выражений. Нет ховера и фокуса. Нет псевдоэлементов. Стили в Реакт: инлайн const headerStyle = { color: 'red', fontSize: '24px', // Это невозможно понять, это можно только запомнить. WebkitTransition: 'all', // тут большая 'W' важна msTransition: 'all' // а 'ms' уже маленькая }; class HelloWorld extends React.Component { render() { return <h1 style={headerStyle}> Hello World! </h1>; } }
  • 23. Стили в Реакт: инлайновая боль
  • 24. import styles from "./hello-world.css"; class HelloWorld extends React.Component { render() { return <h1 style={styles.headerStyle}> Hello World! </h1>; } } Стили в Реакт: react-css-modules
  • 25. Стили в Реакт: styled-components const RedTitle = styled.h1` color: red; fontSize: 24px; `; class HelloWorld extends React.Component { render() { return <RedTitle> Hello World! </RedTitle>; } }
  • 26. Стили в Вью <template> <h1> Hello World! </h1> </template> <style> h1 { color: red; } </style> // template <h1> Hello World! </h1> // style.css h1 { color: red; }
  • 27. Стили в Вью: компонентный подход <template> <h1> Hello World! </h1> </template> <style scoped> h1 { color: red; } </style> // template <h1 data-v-f3f3eg9> Hello World! </h1> // style.css h1[data-v-f3f3eg9] { color: red; }
  • 28. Стили в Вью: CSS модули <template> <h1 v-bind:class=”$style.red”> Hello World! </h1> </template> <style modules> .red { color: red; } </style> // template <h1 class=”_1VyoJ-uZOjlO_0”> Hello World! </h1> // style.css h1._1VyoJ-uZOjlO_0 { color: red; }
  • 30. Шаблон в Реакте, наверное, где-то тут return <div> {props.isLoggedIn ? <UserGreeting/> : <GuestGreeting /> } </div> return <div> {state.array .map((s,i) => <span key={i}>{s}</span>) } </div> return <div>{myAwesomeTemplate}</div> Можно в представлении засунуть много логики. Можно размазать представление по коду компонента. Легко запутаться и запутать других.
  • 31. Шаблон во Вью <template> <div> <user-greeting v-if=”isLoggedIn”/> <guest-greeting v-else /> <span v-for=”i in Array(level).fill(0)” :key=”i”/>{{i}}</span> </div> </template> Валидный HTML — валидный шаблон. Директивы, как управление логикой отображения. Можно использовать JSX или сразу функцию render.
  • 32. Директивы — это синтаксический сахар <nav> <a v-if="signedIn">logout</a> <a v-else>login</a> </nav> function render() { with(this) { return _c('nav', [ (signedIn) ? _c('a', [_v("logout")]) : _c('a', [_v("login")]) ]); } } https://vuejs-tips.github.io/compiler/#v-else
  • 33. Двунаправленное связывание в Реакте class Hello extends React.Component { state = { name: 'World' } change(e) { this.setState({ name: e.target.value }); } render() { const { name } = this.state; return <div> Name: <input value={name} onChange={this.change.bind(this)} /> <br/> Hello {name}! </div>; } }
  • 34. Двунаправленное связывание во Вью <template> <div> Name: <input v-model='name' /> <br/> Hello {{name}}! </div> </template> <script> export default { data() { return { name: 'World' } } } </script>
  • 35. Двунаправленное связывание во Вью <template> <div> Name: <input v-bind:value='name' v-on:input='name = $event.target.value' /> <br/> Hello {{name}}! </div> </template>
  • 36. Двунаправленное связывание во Вью. С рюшечками. <template> <div> Name: <input-length v-model='name' /> <br/> Hello {{name}}! </div> </template> Компонент с поддержкой v-model: — принимает входной параметр value — порождает событие input с новым значением
  • 38. Управление состоянием в Реакт: Редакс Явно связываем стэйт и пропсы. Явно объявляем экшены для диспатчеров.
  • 39. Управление состоянием в Реакт: Мобикс Явно указываем, за какими свойствами стора следим в компоненте. Все экшены доступны. Чуть больше магии обсерверов.
  • 40. Управление состоянием во Вью: Вьюикс (Vuex) Весь стэйт доступен. Все экшены доступны. Магия обсерверов на 100%
  • 43. Магия Вью export default { data() { return { someObject: {} } } }); Каждое свойство объекта превращается в пару геттер/сеттер с помощью волшебства Object.defineProperty.
  • 44. Методы массива перехватываются, чтобы включить уведомление об изменениях массива. Магия Вью: массивы export default { data() { return { someArray: [] } } });
  • 45. Магия Вью: вычисляемые свойства { data: { a: 1 }, computed: { // свойство только возвращает данные: aDouble() { return this.a * 2 }, // свойство и возвращает, и получает данные: aPlus: { get() { return this.a + 1 }, set(v) { this.a = v − 1 } } } } this.a; // 1 this.aPlus // 2; this.aPlus = 5; this.a; // 4 this.aDouble; // 8; Свойства кешируются и повторно вычисляются только при изменении реактивных зависимостей.
  • 46. Скорость Вью и Реакт Вью на ≈10% быстрее Реакта в сырой производительности рендеринга и обновления страницы. http://www.stefankrause.net/wp/?p=431 Реакт отлично оптимизируется вручную, а Вью позволяет сосредоточиться на написании кода.
  • 48. Преимущества Вью Вью — коробочная система для одностраничных приложений. Вью стремительно развивается. Файл компонента выглядит понятно. Удобная работа с шаблонами и стилями. Небольшая щепотка синтаксического сахара. У Вью настоящая реактивность под капотом. Вью изумительно прост.
  • 51. А можно просто работать MacOS
  • 52. Документация Вью https://vuejs.org/ https://router.vuejs.org/ https://vuex.vuejs.org/ https://vue-loader.vuejs.org/ https://github.com/vuejs/awesome-vue Прекрасная документация Вью, которую приятно читать. Роутер для Вью. Вьюэкс — хранилище данных. Как работает лоадер во Вью. Сборник решений, плагинов и т.п.
  • 54. Работайте с тем, что знаете.
  • 55. Работайте с тем, что знаете. Изучайте новое.
  • 56. Работайте с тем, что знаете. Изучайте новое. Задавайте вопросы.
  • 57. Работайте с тем, что знаете. Изучайте новое. Задавайте вопросы.Борисенко Андрей, seigiard@gmail.com

Editor's Notes

  1. Я веб-разработчик. Влюбился в веб в конце 90х Успел поверстать под пятый Интернет Эксплорер Начал карьеру универсальным программистом на ПиЭйчПи. Ушёл в верстальщики на модный стек HTML+CSS+JS. В Одессу я переехал в 2012 из Минска. Начал работать фронтенд-разработчиком в небольшой компании. Сейчас я делаю фронтенд в полном смысле этого слова делаю прототипы разрабатываю интерфейсы создаю системы разработки интерфейсов, чтобы разработчики не поубивали дизайнеров программирую и верстаю Первый фреймворк — Ангуляр Легкий порог вхождения Понятная логика работы Большая поддержка комьюнити Эксперименты: «Нормально», «писать можно», «попробовали и хватит», но ничего выдающегося.
  2. Посмотреть на него в 2013 году и отложил Посмотрел недавно и… теперь я его боюсь. Реакт — великолепная вещь. Компонентный подход, виртуальный дом, новая веха разработки. Используют все. Любят все, 67 тыс. звёзд на Гитхабе
  3. Это большой конструктор «собери сам». Можно построить болид, а можно разваливающийся самокат
  4. Непонятные и странные моменты: многословность (Редакс) слишком много компонентов JSX → размазанные шаблоны Стили Недостатки Реакта это продолжение его гибкости! Можно сделать лучше.
  5. Вью — нет сожалений. Как-раз в это время простой китайский паренёк Эван Ю пришёл работать в Гугл над Ангуляром. Многие, как и я, знакомы с первым Ангуляром. Реальный прорыв: Первые шаги компонентного подхода дата-биндинг, простое понятие скоупа, шаблоны с фильтрами и директивам Работало на ИЕ Эван решил написать свой фреймворк.
  6. Китайская модель познания мира — через копирование и улучшение.
  7. Скопируй, повтори, улучши — как китайские телефоны.
  8. 2014 — первая версия Вью 2016 — полностью переписана новая версия Вью 54 тысячи звёзд на Гитхабе Виикс — аналог Реакт Нэйтив. Фейсбук = Реакт, а Гугл = Ангуляр, Алибаба Групп = Вью. GitLab перевёл свою разработку фронтенда на Вью GitLab, Laravel, CodeShip, PageKit
  9. Цикл компонента: создание, монтирование, обновления уничтожение, Почему сразу цикл? Зашёл с козырей: Красота, понятность и лаконичность наименования Шутка. Простота внутри.
  10. Глядя на код компонёнта Вью, всё понятно.
  11. В компоненте Реакта сложно разобраться, где у нас код, а где представление. Шаблон в логике, логика в шаблоне, можно натворить делов. Хочется простоты и понятности.
  12. Вью: три части компонента в одном файле: шаблон стиль логика
  13. Можно разнести по разным файлам, всё работает из коробки.
  14. Опции компонента Компонент Вью — объект со свойствами. Свойство «дата» — объект с данными компонента, его внутренний стейт.
  15. Свойство «пропс» — пропсы ожидаются в компоненте, как список или развёрнуто, с валидацией и прочим. Похоже на пропТайпс в Реакте.
  16. Свойство «компьютед» — это вычисляемые свойства компонента. Мы поговорим о них позже.
  17. «Вотч» — это вотчеры
  18. Свойство «месодтс» это объект методов компонента.
  19. Стили — самая странная и нелюбимая часть в Реакте. Стили — боль. Опытные реакт-разработчики притерпелись. Я люблю ванильного аштээмэль и цээсэс и это адский ад.
  20. Инлайн-стили.
  21. Инлайн-стили со свойствами с префиксами. ВебкитТранзишн мы пишем с большой, префикс для эксплорера — с маленькой. Инлайн-стили с псевдоэлементами и медиа-выражениями.
  22. АД в дев-инспекторе Люди начали искать пути решения проблемы Внешний файл со стилями и использование классов. Классы — это классНейм, а это БЕСИТ. <> это верстка! Компонентный подход? Все для компонента в одном месте!
  23. реакт-цээсэс-модули: импортим файл и используем названия классов
  24. CSS-in-JS, СтайледКомпонентс Стилизированные дом-элементы. Взрывает мне мозг, но ОК Во Вью всё проще. Внешний css и классами, как и в Реакте.
  25. Классический путь: пишем стили в блоке стилей Собирается в цээсэс со стилем, но применяется ко всему приложению Нужны скоупы
  26. Аттрибут scoped и у нас есть скоупы для компонентов
  27. Аттрибут module и биндим имена классов Лоадер разберётся
  28. Вторая вещь, не очень нравится
  29. ДжейЭсИкс — это сила, потому что это код, который притворяется разметкой. Циклы? Условия? Всё через код → некоторые преимущества Возникают три проблемы: Нельзя просто так скопировать код, помни о classNames Много логики в рендере, где хотелось бы видеть чистые шаблоны. Или мы размазываем шаблоны по компоненту и их становится не видно.
  30. Валидный HTML — это валидный шаблон Vue Управление циклами и условиями — через директивы в коде. Естественно и декларативно для HTML. Вью поддерживает Джээсикс. Вью поддерживает рендер.
  31. Работа с html - это ужас! Так никто не делает и так медленно! Код шаблонов преобразуется в джаваскрипт, как и в Реакте Все директивы — это просто синтаксический сахар. Иф-элз — рендерится в функцию
  32. Двунаправленное связывание между полем ввода и какой-то переменной. В Реакт у нас есть значение стейта, оно биндится в инпут, а каждое изменение инпута меняет это значение стейта.
  33. Объявили переменную как ви-модел в инпуте и связь установилась сама.
  34. Под капотом ви-модель всё также происходит биндинг переменной и запись значения на каждое изменение.
  35. Это позволяет нам реализовать кастомные поля ввода. Нам надо всего лишь принимать проперти «вэлью» вниз, в компонент, и отсылать событие «input» наверх
  36. Перейдём к управлению состоянием приложения, чтобы раскрыть тему Стандарт де-факто в Реакте является Редакс. Также люди используют Мобикс.
  37. Схема работы у этих систем проста: компонент имеет переменные, связанные со стором. компонент вызывает экшн экшн запускает магию создаётся новый стор или обновляется старый у компонентов обновляются переменные и компонент перерисовывается Редакс явно связать стэйт и пропсы через мэпСтейтТуПропс и объявить экшены через мэпДиспатчТуПропс.
  38. Мобикс — больше реактивности, меньше ручной работы описать экшены в компоненте объявить, за какими свойствами стейта мы будем наблюдать Магия обсерверов: меняем стэйт — наблюдаемые значения обновятся автоматически
  39. Вьюэкс Реакт и Мобикс — несколько более многословным вариантом Вьюэкса. Всегда доступен весь стейт Всегда доступны все экшены При вызове экшенов наши мутации меняют стэйт и всё изменения автоматически перерисовываются на местах.
  40. Как работает магия Вью Кто знает Мобикс — молчать Мы знаем, зачем в Реакте нужен шудКомпонентАпдейт. Для оптимизации перерисовки. Во Вью компоненты сами знаю, когда и что им перерисовывать.
  41. После компиляции, у каждого компонента появляется наблюдатель Наблюдатель помечает все поля, как зависимости. Наблюдатели строят дерево зависимостией. Переменная меняется — знают все зависимые переменные через наблюдателей. Инициируется повторный рендеринг. Пересчитывать зависимости и перерисовывать ДОМ на каждое изменение данных очень накладно. Обновление ДОМ выполняется асинхронно. При изменении данных, создаётся очередь-буфер, в которую складываются все зависимые изменения данных. Дубликаты убираются В следующем тике Вью разбирает очередь и выполняет актуальные обновления. Благодаря использованию буфера и устранению дубликатов, вычисления и манипуляции с ДОМом сводятся к минимуму. Все зависимости автоматически собираются в дерево зависимостей При обновлении одной переменной, обновляются и зависимые. Обновления асинхронны, чтобы оптимизировать изменение дома
  42. Как отслеживаются изменения? Ангуляр — дёрти-чекинг При компиляция компонентов, все свойства объекта date превращаются в геттер/сеттер, используя Обджект.дефайнПроперти. Геттеры и сеттеры являются тем внутренним механизмом, который сигнализирует об изменениях.
  43. У массивов нет геттеров и сеттеров на изменения массивов. При инициализации данных Вью перехватывает методы внесения изменений массива, такие как пуш, поп, слайс, чтобы они уведомляли об изменениях. Иммутабельные методы массива (filter, concat или reduce) всегда возвращают новый массив. Это не проблема. Вью минимизирует изменения в ДОМе, не перерисовывает сразу всё. Поэтому можно не волноваться о производительности.
  44. Вычисляемые свойства, которые зависят от других свойств. Знаем зависимости — пересчитываем только при изменении зависимости.
  45. Работа с обсерверами, кеширование и минимизирование работы с домом — очень хорошая производительность из коробки. В синтетических тестах на изменение и обновление ДОМа, Вью быстрее Реакта где-то на 10%. Реакт хорошо поддаётся оптимизации Если Реакт требует ручной оптимизации, то Вью позволяет сосредоточиться на написании приложения.
  46. Я попытался рассказать немного о магии Вью, благодаря которой я получаю истинное удовольствие от программирования.
  47. Вью — это фреймворк для разработки приложений, а не один кусочек пазла, как Реакт. Вью — стремительно развивается Однофайловые компоненты — очень естественными в работе. Работа с шаблонами во Вью более наглядна, чем в Реакте Работу со стилями просто божественна. Вью более прост в обучении, потому что простота, скажем так, встроена в дизайн Вью. Кстати, о простоте.
  48. 7 лет назад Виндоуз → Убунту. Эксперименты и настройка.
  49. Ubuntu + AwesomeWindowManager. Супернастройка, но никто не может работать, кроме меня.
  50. Переезд в Одессу: Убунту → Мак Две недели попытка настроить систему под себя. Потом понимание, что надо просто работать. Реакт = AwesomeWindowManager или машина Формула1 Вью = Мак или серийный спорткар. Просто берёшь и работаешь.
  51. Сообщества процветают. Реакт на пике своего могущества. Если вы заинтересовались Вью — документаця по Вью Документация отличная и переведена на русский.
  52. Я не призываю вас сразу переходить на Вью.
  53. Вью только набирает силу, а если вы и ваша команда умеет готовить Реакт — вы будете продуктивны с Реактом.
  54. Нравится Реакт и Мобикс — Вью. В своём сайд-проекте хотите изучить что-то новое — Вью. Надо быстро прототипировать — Вью Надеюсь, он вам понравится.
  55. Задавайте вопросы.
  56. Спасибо.