SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
VUE.JS
VUE.JS как реакт с человеческим лицом
Вольдэмар Дулецкий ( @r00takaspin ), компания Evrone
VUE.JS
Прежде всего View библиотека, а не framework
Компактен, быстр, прост
Очень похож на React: Virtual DOM, компоненты, Vuex
*Иногда сравнивают как смесь Angular 1 и React.
Как выглядит компонент?
Отдельный файл c расширением .vue:
<template>
Say hello: <span class='colored'>{{ $hello }}</span>
</template>
<style>
.colored {
color: 'yellow'
}
</style>
<script>
export default {
name: 'hello-component',
data(): {
return { hello: 'Hello, buddy' }
},
mounted() {
console.log('hey, I am inited')
}
}
</script>
Тестируем компонент
Святая троица:  karma ,  jasmine ,  phantom-js .
Пример теста:
it('#confirmed', () => {
let component = getComponent('confirmed');
expect(component.icon_class).toBe('bg-success');
expect(component.title).toBe('Confirmed')
});
it('#declined', () => {
let component = getComponent('declined');
expect(component.icon_class).toBe('bg-danger');
expect(component.title).toBe('Declined')
});
Модульность
Через модули и миксины мы можем выносить общую логику в отдельные сущности и при
необходимости их подключать. Ниже пример миксина:
export default {
computed: {
file_name() {
if (this.files) {
let url = new URL(this.files[0].url);
return url.pathname.replace(/^.*[/]/, '')
} else {
return 'N/A'
}
}
}
}
Документация на русском языке
Вся документация по библиотекам входящим в экосистему есть на русском языке и
поддерживается в актуальном состоянии.
Небольшое, отзывчивое комьюнити
авторы библиотек отвечают быстро
документация не core‑библиотек может быть не актуальной
Общая проблема молодых проектов
vee‑validations ‑ валидации
vue‑resource ‑ годный http клиент
vue‑i18n ‑ переводы
vue‑router ‑ роутер для SPA
Полный список: awesome‑vue.com
Vue.js devtools
Моя история
Задача: сделать админку на vue, бэкэнд на Ruby On Rails.
2‑3 дня на настройку webpack, babel
1‑2 дня настройка связки karma, jasmine, phantomjs
вечер на интеграцию с CI
около недели на понимание работы и взаимодействия компонентов
неделя на понимание работы со стейтом
Перейдем к практике
Воспользуемся утилитой  vue-cli для быстрого развертывания приложения:
npm install -g vue-cli
Создадим приложение:
vue init link-shorter
Далее последует несложный диалог о конфигурировании приложения.
*Очень похоже на ember‑cli
Структура приложения
.
├── README.md
├── build
│   ├── build.js
│   ├── check-versions.js
│   ├── dev-client.js
│   ├── dev-server.js
│   ├── utils.js
│   ├── vue-loader.conf.js
│   ├── webpack.*.conf.js
├── config
│   ├── dev.env.js
│   ├── index.js
│   ├── *.env.js
├── index.html
├── package.json
├── src
│   ... # каталог приложения
├── static
└── test
│   ... # тесты
Как выглядит директория приложения?
src
├── App.vue # корневой компонент
├── assets
│   └── logo.png
├── components # директория с компонентами
│   └── Hello.vue
├── main.js # точка входа приложения
└── router
└── index.js # директория для роутов
Добавим зависимости
yarn add bootstrap-vue@latest # куда без него?
yarn add vuex@latest # Vuex!
ShortLinkForm
обратим внимание на семантическое название
обратим внимание что всегда нужно внутри  <template> добавлять  div , внутри
которого будет шаблон
<template>
<div>
<input type="text" class="form-control" v-model="url" placeholder="Ссылка">
<span class="input-group-btn">
<button class="..." type="button" v-on:click="minimizeUrl">
Укротить
</button>
</span>
</div>
</template>
<script>
export default {
name: 'short-link-url',
data () {
return {
url: ''
}
},
methods: {
minimizeUrl: () => {
console.log('url minimized')
}
}
}
</script>
Регистрация компонента в приложении
<template>
...
<short-link-form></short-link-form>
...
</template>
<script>
import Vue from 'vue'
import ShortLinkForm from './ShortLinkForm.vue'
Vue.component('short-link-form', ShortLinkForm)
export default {
name: 'Index',
components: {ShortLinkForm}
}
</script>
Список укороченных ссылок
cоздадим SortLinkList, который будет выводить все сокращенные урлы
на помощь приходит Vuex
Vuex
const URL = 'http://localhost:8080/'
export default new Vuex.Store({
state: {
urls: []
},
mutations: {
MINIMIZE_URL (state, url) {
let hash = crypto.randomBytes(10).toString('hex')
state.urls.push({
url: url,
short: `${URL}${hash}`
})
}
}
})
Как изменится компонент ShortLinkForm?
<template>
<!--никак не меняется-->
</template>
<script>
export default {
name: 'short-link-url',
data () {
return {
url: ''
}
},
methods: {
minimizeUrl () {
this.$store.commit('MINIMIZE_URL', this.url)
}
}
}
</script>
Список сокращенных ссылок
<template>
<table class="table">
<tr v-for="url in urls">
<td>
{{url.url}}
</td>
<td>
{{url.short}}
</td>
</tr>
</table>
</template>
<script>
export default {
name: 'short-url-list',
computed: {
urls: function () {
return this.$store.state.urls
}
}
}
</script>
Хуки
export default {
name: 'Index',
components: {ShortUrlList, ShortLinkForm},
mounted () {
let urls = ['http://ya.ru/', 'http://google.com', 'http://koenig-rb.ru/']
for (let i = 0; i < urls.length; i++) {
this.$store.commit('MINIMIZE_URL', urls[i])
}
}
}
Если мы хотим что‑то подгрузить при инициализации компонента.
Webpack
Никаких проблем при использовании  vue-cli .
Перед выходом в продакшен все‑таки придется изучить webpack.
3 причины перейти с реакта
vue компоненты восхитительны и не ломают глаза, вызывают привыкание
быстрый старт с  vue-cli 
основные библиотеки экосистемы поддерживаются авторами библиотеки
5 причин попробовать после jQuery
не хотите выбирать между Flux/Redux ‑ попробуйте сразу Vuex
попробуйте реактивность
библиотека очень дружественна, пологая кривая вхождения
подключить можно через  <script src="https://unpkg.com/vue"></script> 
отзывчивое комьюнити, быстро помогают новичкам, хороший форум
forum.vuejs.org
Где не стоит использовать?
Мобильные приложения.
Где стоит использовать?
Везде где нужна быстрая и функциональная View библиотека без лишних зависимостей.
Вольдэмар Дулецкий, веб‑разработчик, компания Evrone
https://github.com/r00takaspin
https://fb.com/voldemar.duletskiy
voldemar@evrone.com
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндексit-people
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Ontico
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb SpockBohdan Danyliuk
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
'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'2020OdessaJS Conf
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2Gennady Kovshenin
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 

Was ist angesagt? (20)

Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
'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
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 

Ähnlich wie "VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone

Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
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 #10OdessaFrontend
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""OdessaJS Conf
 
Yii2
Yii2Yii2
Yii2Noveo
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-people
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruJetStyle
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 
react-native
react-nativereact-native
react-nativewtfil
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemAnton Rutkevich
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.Дмитрий Бумов
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 

Ähnlich wie "VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone (20)

Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
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
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""
 
Yii2
Yii2Yii2
Yii2
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
react-native
react-nativereact-native
react-native
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build system
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 

Mehr von it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 

Mehr von it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone

  • 1. VUE.JS VUE.JS как реакт с человеческим лицом Вольдэмар Дулецкий ( @r00takaspin ), компания Evrone
  • 2. VUE.JS Прежде всего View библиотека, а не framework Компактен, быстр, прост Очень похож на React: Virtual DOM, компоненты, Vuex *Иногда сравнивают как смесь Angular 1 и React.
  • 3. Как выглядит компонент? Отдельный файл c расширением .vue: <template> Say hello: <span class='colored'>{{ $hello }}</span> </template> <style> .colored { color: 'yellow' } </style> <script> export default { name: 'hello-component', data(): { return { hello: 'Hello, buddy' } }, mounted() { console.log('hey, I am inited') } } </script>
  • 4. Тестируем компонент Святая троица:  karma ,  jasmine ,  phantom-js . Пример теста: it('#confirmed', () => { let component = getComponent('confirmed'); expect(component.icon_class).toBe('bg-success'); expect(component.title).toBe('Confirmed') }); it('#declined', () => { let component = getComponent('declined'); expect(component.icon_class).toBe('bg-danger'); expect(component.title).toBe('Declined') });
  • 5. Модульность Через модули и миксины мы можем выносить общую логику в отдельные сущности и при необходимости их подключать. Ниже пример миксина: export default { computed: { file_name() { if (this.files) { let url = new URL(this.files[0].url); return url.pathname.replace(/^.*[/]/, '') } else { return 'N/A' } } } }
  • 6. Документация на русском языке Вся документация по библиотекам входящим в экосистему есть на русском языке и поддерживается в актуальном состоянии.
  • 7. Небольшое, отзывчивое комьюнити авторы библиотек отвечают быстро документация не core‑библиотек может быть не актуальной
  • 9. vee‑validations ‑ валидации vue‑resource ‑ годный http клиент vue‑i18n ‑ переводы vue‑router ‑ роутер для SPA
  • 12. Моя история Задача: сделать админку на vue, бэкэнд на Ruby On Rails. 2‑3 дня на настройку webpack, babel 1‑2 дня настройка связки karma, jasmine, phantomjs вечер на интеграцию с CI около недели на понимание работы и взаимодействия компонентов неделя на понимание работы со стейтом
  • 13. Перейдем к практике Воспользуемся утилитой  vue-cli для быстрого развертывания приложения: npm install -g vue-cli Создадим приложение: vue init link-shorter Далее последует несложный диалог о конфигурировании приложения. *Очень похоже на ember‑cli
  • 14. Структура приложения . ├── README.md ├── build │   ├── build.js │   ├── check-versions.js │   ├── dev-client.js │   ├── dev-server.js │   ├── utils.js │   ├── vue-loader.conf.js │   ├── webpack.*.conf.js ├── config │   ├── dev.env.js │   ├── index.js │   ├── *.env.js ├── index.html ├── package.json ├── src │   ... # каталог приложения ├── static └── test │   ... # тесты
  • 15. Как выглядит директория приложения? src ├── App.vue # корневой компонент ├── assets │   └── logo.png ├── components # директория с компонентами │   └── Hello.vue ├── main.js # точка входа приложения └── router └── index.js # директория для роутов
  • 16. Добавим зависимости yarn add bootstrap-vue@latest # куда без него? yarn add vuex@latest # Vuex!
  • 17. ShortLinkForm обратим внимание на семантическое название обратим внимание что всегда нужно внутри  <template> добавлять  div , внутри которого будет шаблон
  • 18. <template> <div> <input type="text" class="form-control" v-model="url" placeholder="Ссылка"> <span class="input-group-btn"> <button class="..." type="button" v-on:click="minimizeUrl"> Укротить </button> </span> </div> </template> <script> export default { name: 'short-link-url', data () { return { url: '' } }, methods: { minimizeUrl: () => { console.log('url minimized') } } } </script>
  • 19. Регистрация компонента в приложении <template> ... <short-link-form></short-link-form> ... </template> <script> import Vue from 'vue' import ShortLinkForm from './ShortLinkForm.vue' Vue.component('short-link-form', ShortLinkForm) export default { name: 'Index', components: {ShortLinkForm} } </script>
  • 20. Список укороченных ссылок cоздадим SortLinkList, который будет выводить все сокращенные урлы на помощь приходит Vuex
  • 21. Vuex const URL = 'http://localhost:8080/' export default new Vuex.Store({ state: { urls: [] }, mutations: { MINIMIZE_URL (state, url) { let hash = crypto.randomBytes(10).toString('hex') state.urls.push({ url: url, short: `${URL}${hash}` }) } } })
  • 22. Как изменится компонент ShortLinkForm? <template> <!--никак не меняется--> </template> <script> export default { name: 'short-link-url', data () { return { url: '' } }, methods: { minimizeUrl () { this.$store.commit('MINIMIZE_URL', this.url) } } } </script>
  • 23. Список сокращенных ссылок <template> <table class="table"> <tr v-for="url in urls"> <td> {{url.url}} </td> <td> {{url.short}} </td> </tr> </table> </template> <script> export default { name: 'short-url-list', computed: { urls: function () { return this.$store.state.urls } } } </script>
  • 24. Хуки export default { name: 'Index', components: {ShortUrlList, ShortLinkForm}, mounted () { let urls = ['http://ya.ru/', 'http://google.com', 'http://koenig-rb.ru/'] for (let i = 0; i < urls.length; i++) { this.$store.commit('MINIMIZE_URL', urls[i]) } } } Если мы хотим что‑то подгрузить при инициализации компонента.
  • 25. Webpack Никаких проблем при использовании  vue-cli . Перед выходом в продакшен все‑таки придется изучить webpack.
  • 26. 3 причины перейти с реакта vue компоненты восхитительны и не ломают глаза, вызывают привыкание быстрый старт с  vue-cli  основные библиотеки экосистемы поддерживаются авторами библиотеки
  • 27. 5 причин попробовать после jQuery не хотите выбирать между Flux/Redux ‑ попробуйте сразу Vuex попробуйте реактивность библиотека очень дружественна, пологая кривая вхождения подключить можно через  <script src="https://unpkg.com/vue"></script>  отзывчивое комьюнити, быстро помогают новичкам, хороший форум forum.vuejs.org
  • 28. Где не стоит использовать? Мобильные приложения.
  • 29. Где стоит использовать? Везде где нужна быстрая и функциональная View библиотека без лишних зависимостей.
  • 30. Вольдэмар Дулецкий, веб‑разработчик, компания Evrone https://github.com/r00takaspin https://fb.com/voldemar.duletskiy voldemar@evrone.com