
Andrey
11.05.2017
20:16:28
ну на этапе активной разработки, особенно в самом начале это реально кучу времени съедает

Rafael
11.05.2017
20:23:10

Andrey
11.05.2017
20:23:27

Google

Andrey
11.05.2017
20:24:02
у меня есть коммиты которы не отображаются в тулзах

Rafael
11.05.2017
20:27:00
Хмм

Andrey
11.05.2017
20:27:16
ну я так то же думал, в итоге такое есть

Rafael
11.05.2017
20:27:31
А если серьёзно, то как комиты могут быть неудачными?
Там же даже ветвления почти быть недолжно

Andrey
11.05.2017
20:27:53
ну если у тебя в мутации ошибка произошла

Rafael
11.05.2017
20:28:21

Andrey
11.05.2017
20:28:35
у меня там есть некотороя логика

Rafael
11.05.2017
20:28:39
Даже от ветвлений избавлюсь по максимуму

Andrey
11.05.2017
20:28:54

Google

Rafael
11.05.2017
20:28:58
Мутация мутирует, тупо мутирует

Andrey
11.05.2017
20:29:00
там не асинхронной логики

Rafael
11.05.2017
20:29:02
Действия для логики

Andrey
11.05.2017
20:29:46
это атомарная операция

Rafael
11.05.2017
20:29:54
Просто то что нужно помом делаешь в then

Andrey
11.05.2017
20:30:06
поэтому там должно быть то что должно быть выполнено атомарно

Alexandr
11.05.2017
20:32:15
мутация чисто для того, чтоб стор изменить

Andrey
11.05.2017
20:32:59
да, но у этого изменения может быть логика

Rafael
11.05.2017
20:33:13

Andrey
11.05.2017
20:33:39
идеологически мутация = транзакции
если тебе в рамках одной транзакции надо сделать несколько изменений основанных на логике, то ты делаешь их в рамках одной транзакции
правда жалко что нет ролбэка при ошибках

Stanislav
11.05.2017
20:40:43

Andrey
11.05.2017
20:41:06
в рамках идеологии каждое действие это атомарная транзакция
при добавление просто доабвляем в лист
при удалении нам еще надо удалить маркер
просто какой тогда смыл в мутациях, если можно сделать одну типа
set (state, data) {
_.assignIn(state, data)
},
а в actions уже какая-то асинхронщина, логика для вызова мутиаций/последовательности мутаций

Google

Andrey
11.05.2017
20:47:07
поправте меня, если я это не правильно понимаю

Rafael
11.05.2017
20:53:59
Поэтому действие атомарно

Andrey
11.05.2017
20:54:22

Rafael
11.05.2017
20:54:52
не каждая
Привели пример не атомарной функции, внутри которой нет асинхронщены
И которая не атомарна

Andrey
11.05.2017
20:55:12
ну да, я про асинхронщину

Rafael
11.05.2017
20:55:44
Так вот vuex тебе разрешаешь делать композицию действий, вот она не будет атомарной
Я так придерживаясь всегда:
1) тупая мутация
2) действия с логикой (обёртка над мутацияей)
3) композиция действий для сложной логики
До сих пор НИКАКИХ проблем не испытывал
И это легко дебажится

Andrey
11.05.2017
20:57:26
тоесть вместо того что бы сделать одну функцию в рамках бизнес логики ты делаешь несколько ?

Alexandr
11.05.2017
20:57:50
^ да

Rafael
11.05.2017
20:57:57
Причём если ты наименования мутаций содержишь в константах, то именовать действия обертки ваще легко

Alexandr
11.05.2017
20:58:02
я так делал

Rafael
11.05.2017
20:58:13

Alexandr
11.05.2017
20:58:28
экшн диспатчит экшн

Rafael
11.05.2017
20:58:29
И это не мешает мне, потому что vuex поддерживает модули
Константное именование мутация позволяет мне не париться над именования действий аберток и сразу видно, где обёртка а где действие

Google

Rafael
11.05.2017
20:59:48

Andrey
11.05.2017
20:59:58
Да
вот этого я не понимаю. У тебя есть задача создать point на карте. Зачем тебе делать несколько экшенов, если это единая логическая оперция?

Rafael
11.05.2017
21:00:44
Это как геттер и сеттер, также идеалогия

Andrey
11.05.2017
21:00:56
зачем тебе другие мутации кроме _.assignIn(state, data)?

Rafael
11.05.2017
21:01:21
Я сразу виду, что там произошло и могу спокойно размотать стек вызовов, потому что он будет очевидным

Andrey
11.05.2017
21:02:30

Admin
ERROR: S client not available

Rafael
11.05.2017
21:03:58

Andrey
11.05.2017
21:04:13
ну да, вот у меня так же

Rafael
11.05.2017
21:04:24
Не такой уж ибольшой оверхед
Мутация только мутирует и все, а всякие там проверки и прочая лабуда в действии
Кстати из-за этого еще и мутации становятся чистыми и понятными
Смотришь на эти пару строк и сразу все ясно

Andrey
11.05.2017
21:11:40
вообще выглядит логичным
https://github.com/vuejs/vuex/blob/dev/examples/chat/store/mutations.js

Roman
11.05.2017
22:41:29
Всем привет) а кто-нибудь подскажет ссылку на best practices, patterns по vuejs? в официальной доке, на мой взгляд, их маловато

Oleg
11.05.2017
22:42:38
Никто не натыкался на infinity-scroll с preload и afterRemover?
Нужно грузить картинки отрисвывать их и после скрола дальше удалять с страницы заменяя пустым div'ом.

Google

Illya
11.05.2017
22:45:11
да и ангуляра по сути

Roman
11.05.2017
22:45:58
интересно. а я уже начал бояться, что начинаю применять некоторые react паттерны во vue x)


Illya
11.05.2017
22:52:39
1) не нарушайте S в SOLID - ваши UI-компоненты должны делать ровно одну вещь. Если в описании что компонент делает используется "и" - это может быть хорошим поводом разбить его на отдельные компоненты
2) разделяйте "умные" компоненты в которых хранится логика приложения и "глупые" отвечающие только за представления. Для глупых может быть оправдано использование functional: true
3) здесь вам не Реакт(с). Не передавайте обработчики событий в нижние компоненты (вместо этого emit события делайте), не передавайте в нижние компоненты "рендерилки" каких-то кусков - вместо это во Vue положено использовать слоты
4) максимально разделяйте бизнес логику, логику отображения и транспортный слой. Транспортный слой вообще стоит делать framework-agnostic, бизнес-логику можно выносить в vuex если вы его используете или в отдельные сервисы. Избегайте бизнес-логики в глупых компонентах любой ценой
5) По максимуму используйте вычислимые свойства. Причем в обе стороны - это позволяет упростить код шаблона и бизнес-логики одновременно, сохранив тонкий слой преобразований
6) Старайтесь не расширять прототип Vue. Это приводит к тому, что становится сложно рассуждать откуда появились те или иные методы у компонента - вместо этого лучше использовать обычные es6 модули и помнить, что они синглтоны
7) Очень аккуратно наследуйте компоненты. Это нужно крайне редко, сценарий - специализация компонент и "тонкая настройка". Но еще раз - это стоит делать очень редко и очень аккуратно
8) Не бойтесь использовать jquery и т.п. - много вещей можно быстро сделать с их помощью, но всегда изолируйте их в отдельные компоненты. Не допускайте больших компонентов c vue-логикой и jquery спагетти-кодом
9) Избегайте шины событий. Это допустимо для небольших проектов, но такое решение очень плохо масштабируется. Выгоднее мыслить в терминах изменения состояний
10) Аккуратно обращайтесь с реактивностью - не забывайте использовать Vue.$set когда надо, пишите ваши компоненты устойчивыми к ошибкам
Это из моих набросков


Roman
11.05.2017
22:54:57
Ого, спасибо)

Сашка
12.05.2017
04:27:02

MVP
12.05.2017
04:51:16

DEFACE
12.05.2017
05:30:39
Всем привет
Я хочу использовать vue-resource, установил его и импортирую в верхнем компоненте App
var VueResource = require('vue-resource');
Vue.use(VueResource);
он поидее теперь во всех компонентах должен быть доступен как this.$http?

Alex
12.05.2017
05:33:16
Да

DEFACE
12.05.2017
05:34:15
Да
Я собственно так и думал, но у меня почему то не так. Если вывести в консоль VueResourse то свойство показывает что он установлен, а если попробывать сделать запрос - то получаю ошибку
Error in created hook: "TypeError: Cannot read property 'get' of undefined"
мог бы ты подсказать что я делаю не так, вот кусочек кода
https://gist.github.com/be1fc17f06a5c3d63a81725486084eec

Alex
12.05.2017
05:43:00
created не слишком рано? попробуй на mounted поменять

DEFACE
12.05.2017
05:43:32
Error in mounted hook: "TypeError: Cannot read property 'get' of undefined"
found in
—-> <Project> at /home/deface/PycharmProjects/src/b2b/static/pm/src/components/Project.vue

Alex
12.05.2017
05:45:39
значит что-то не так делаешь, а покажи код компонента выше