
Vlad
27.09.2018
18:51:26

DimenSi
27.09.2018
18:52:11
У меня до сих все грузится.

Vlad
27.09.2018
18:52:45
роскомназдор)
isProd ? '[hash:base64]' : '[local]_[hash:base64:5]'
во, нашел конфиги. про [local] в доках не нашел щас, но это оно)

Google

Vlad
27.09.2018
18:53:39
имя класса будет

DimenSi
27.09.2018
18:55:38
Бля, почему у меня не работает, что за призрачные баги.

Dima
27.09.2018
18:55:54
Всем привет!

DimenSi
27.09.2018
18:56:06
Не могу же я с конфигом тупануть, я же тупо из доки скопировал

Сергей
27.09.2018
19:05:11
Парни, нужен ещё толковый совет)
http://joxi.ru/VrweJPVfOlVPe2
в Vuex есть 3 action, которые получают дату,
посты, пользователи, коменты,
если допустим пользователи и коменты прийдут с задержкой (setTimeout для примера),
то на момент рендера постов геттер, который ищет пользователя по id для каждого поста естественно не найдет пользователя
Как сделать так, что бы после получения кользователей с задержкой вот например такой компонет заново выполнял getter http://joxi.ru/L21JO19F87GlaA и выводил пользователя?
надеюсь нормально сформулировал вопрос)


Алексей
27.09.2018
19:06:23
Парни, нужен ещё толковый совет)
http://joxi.ru/VrweJPVfOlVPe2
в Vuex есть 3 action, которые получают дату,
посты, пользователи, коменты,
если допустим пользователи и коменты прийдут с задержкой (setTimeout для примера),
то на момент рендера постов геттер, который ищет пользователя по id для каждого поста естественно не найдет пользователя
Как сделать так, что бы после получения кользователей с задержкой вот например такой компонет заново выполнял getter http://joxi.ru/L21JO19F87GlaA и выводил пользователя?
тебе немного не это надо, сделай свойство реактивным, чтобы оно отдавало по id нужные посты.
скорее всего ты в коммите делаешь просто posts = responce.data.posts
а это массив наверняка, а массивы при присвоении обычном не отслеживаются на изменения. В итоге ты выводишь "предыдущий" запрос
смотри как заполнять массив в vue чтобы он был реаткиным: push или reduce (для замены), тогда твой computed getter будет в рилтайме возвращать нужные данные


Vlad
27.09.2018
19:11:08

Сергей
27.09.2018
19:11:38

DimenSi
27.09.2018
19:11:43

Google

Алексей
27.09.2018
19:13:17
Эти массивы присваиваются в свойства state в мутаторах, как ты написал про реактивность, вспомнил про Vue.set
http://joxi.ru/RmzQMP9h09XEzr
Попробовал, неа, или я не правильно понял?
через сет не пробовал, я у себя так делаю:
js
setAgreements (state, data = []) {
let agreements = state.agreements
for (let i = 0; i < data.length; i++) {
let itemIdx = -1
if (agreements.length > 0) {
itemIdx = agreements.findIndex(item => parseInt(item.id) === parseInt(data[i].id))
}
if (itemIdx < 0) {
state.agreements.push(data[i])
} else {
state.agreements.splice(itemIdx, 1, data[i])
}
}
localStorage.setItem('agreement', JSON.stringify(state.agreements))
},
реактивность есть

Valeriy
27.09.2018
19:18:54
зачем ты перед сравнением двух переменных делаешь parseInt? :)))
тем более что этой функции надо указывать радикс
parseInt(num, 10)
а то можешь не заметить как оно воспримет строку как восьмеричное число :))

DimenSi
27.09.2018
19:21:27
Как много смайлов

Сергей
27.09.2018
19:21:35
через сет не пробовал, я у себя так делаю:
js
setAgreements (state, data = []) {
let agreements = state.agreements
for (let i = 0; i < data.length; i++) {
let itemIdx = -1
if (agreements.length > 0) {
itemIdx = agreements.findIndex(item => parseInt(item.id) === parseInt(data[i].id))
}
if (itemIdx < 0) {
state.agreements.push(data[i])
} else {
state.agreements.splice(itemIdx, 1, data[i])
}
}
localStorage.setItem('agreement', JSON.stringify(state.agreements))
},
реактивность есть
неа, что-то не то,
у меня от axios приходит уже массив, я его просто присваиваю в свойство из state,

Алексей
27.09.2018
19:22:08
попробуй сделать push - увидишь как обновится вьюха и задублируются твои сообщения
это ты просто можешь быстро проверить

Сергей
27.09.2018
19:22:57
ок) сейчас проверю

Алексей
27.09.2018
19:23:14
this.comments.push(comments)

Сергей
27.09.2018
19:28:30
this.comments.push(comments)
http://joxi.ru/Q2KqoK5C4VbB9r
попробовал, результат тот же,
геттер не видит данных, которые приходят с задержкой

Алексей
27.09.2018
19:29:30
покажи в компоненте геттер как вызываешь

Сергей
27.09.2018
19:30:13

Алексей
27.09.2018
19:31:29
ИМХО ты тут чет не то делаешь, mounted у тебя вызывается 1 раз и до запроса. Сделай computed userById() return getUsers.filter()
и вот уже этот компутедный пихай в <nuxt>
в mapGetters вызови getUsers: return state.users (в store)
а сейчас ты юзера в самом компоненте не в то время 1 раз получаешь просто и не отслеживаешь апдейты

Сергей
27.09.2018
19:36:24
@BaBL86 спасибо тебе!

Google

Алексей
27.09.2018
19:37:31
не за что, теперь разруливай чтоб nuxt не дергался дважды, в первый раз при загрузке, второй при изменении юзера =) можно попробовать v-if user !== null (дефолт стейт при создании компонента)
я просто на эту проблему в свое время больше дня убил =(

Сергей
27.09.2018
19:39:20

Алексей
27.09.2018
19:39:56
при переходе с поста на пост у тебя может быть какое-то время до апдейта данных - старая инфа (стор не обновился еще)
и ссылки будут со старым id, а через секунду обновится getByUser и они перерисуются

Сергей
27.09.2018
19:40:42
ага, взял на заметку,
спасибо

Алексей
27.09.2018
19:41:09
в общем это на твою логику уже завязываться должно, может у тебя и нет такой проблемы
проверить легко, кстати, если под npm run dev зайдешь на /post/1/ грубо говоря или /user/1/ что у тебя там за линки не смотрел. А потом в строке адреса поменяешь на 2 и энтер - будет ребут, данные 1 юзера, потом апдейт и на глазах перерисуется во второго. У меня так это работало
а, хотя у тебя так не будет, я данные из localStorage восстанавливаю, у меня оффлайн есть
надо переходить без перезагрузки
чтобы vuex не был пустым
глупость сморозил

Сергей
27.09.2018
19:45:51
))))))))))))) я понял, но всё же большое спасибо за твоё время.
я возьму на заметку, сейчас просто не могу проверить, ещё не созданы остальные роуты и страницы

Vlad
27.09.2018
19:48:31

Valeriy
27.09.2018
19:49:08

Сергей
27.09.2018
19:49:27

Valeriy
27.09.2018
19:49:53
а почему не используешь asyncData/fetch?
почему через mounted?
там же вроде если тебе надо загрузить в vuex данные асинхронно, то fetch
если нужно чисто локальнов компонент то asyncData

Google

Сергей
27.09.2018
19:53:29

Женя
27.09.2018
19:53:48
Всем привет, такой вопрос подскажите пожалуйста. У меня 1 форма для создания и редактирования, при редактировании я подтягиваю данные с бэка, как лучше сделать: редактируемый объект хранить в state и менять свойства по событиям коммитом? или хранить в компоненте формы и через v-model менять? я бы мог менять через v-model и объект в хранилище но у меня store strict

Valeriy
27.09.2018
19:54:31
т.к. это же не браузер и компоненту просто не куда монтироваться

Alex
27.09.2018
19:54:58
Там вообще нету лайфсайкла
Функции просто генерят строки

Admin
ERROR: S client not available

Valeriy
27.09.2018
19:55:23

Сергей
27.09.2018
19:56:56
Такс, это нужно проверить

Valeriy
27.09.2018
19:57:08
{
el: 'bla-bla-component',
data() { return { xuy: '***' } },
async fetch ({ store, params }) { ...await store.dispatch... },
asyncData (context) { return { xuy: 'pesda' } }
}
как то так это делается

Алексей
27.09.2018
19:57:55

Valeriy
27.09.2018
19:58:00
ну в asyncData там само собой промис

Женя
27.09.2018
19:58:33

Алексей
27.09.2018
20:01:14
Хорошо, спасибо.
# Практика и методы работы со сложными формами во Vue.js - Александр Башкирцев (Software developer, Acronis)
первый митап

Dmitry
27.09.2018
20:48:45
а в сабже можно передать эвент родительскому компоненту не передавая новый экземпляр Vue в дочерний как эвентбас?
чтобы в чайлде сделать что-то типа
ths.$emit("something", this);
и родитель поймал?
у меня почему-то не работает ни
this.$emit("something", this);
ни
this.$parent.$emit("something", this);
но если я делаю отдельную шину и передаю её в компонент — работат

Alex
27.09.2018
20:58:48
Значит либо между родителем и дочерним есть ещё посредники, либо не там ловишь

Алексей
27.09.2018
20:59:05
угу, где v-on ?

Alex
27.09.2018
21:00:12
А ещё vue devtools хорошая штука

Dmitry
27.09.2018
21:03:25
угу, где v-on ?
у меня
this.projectEvents.$on("something", (o: any) => {
console.log("something",);
});
это работает. а если делаю
this.$on("something", (o: any) => {
console.log("something",);
});
не работает

Google

Dmitry
27.09.2018
21:05:13
projectEvents соответственно new Vue, который я передаю компоненту
<Child
v-for="(child, id) …
:project-events="getProjectEvents()"

Сергей
27.09.2018
21:05:39
А ещё vue devtools хорошая штука
So so... Много не показывает, только структуру и свойства. События не видит. Я сегодня 2 часа не мог понять почему $emit не работал в простейшей странице, когда только один компонент вложен в App (vuetify). Пришлось напрямую метод из this.$root вызывать

Vlad
27.09.2018
21:07:34

Alex
27.09.2018
21:07:41

Dmitry
27.09.2018
21:08:56
а у меня показывает события.
и если сделать в чайлде
this.$parent.$parent.$emit("something", this);
то родителю таки долетает

Vlad
27.09.2018
21:09:54
Все нормально он показывает. Вот с вуексом после редаксовских тулзов хреново

Сергей
27.09.2018
21:10:05

Andrew
27.09.2018
21:10:20
если у меня есть массив обьектов, я вывожу их карточками, и мне необходимо выводить тайтл карточки синим текстом, если статус этого обьекта равен 0, а если 1, то тайтл должен быть красным текстом, как это правильно сделать?
через v-if что-то слишком длинные условия получаются. а v-bind больше подходит если обьект 1

Vlad
27.09.2018
21:10:24
Все хотел допилить, но пока разберёшься в сорцах

Сергей
27.09.2018
21:10:33

Dmitry
27.09.2018
21:11:47
угу.
у меня эвент нужен в обработчике нажатия кнопки
оказалось, что в this.$parent лежит чайлд-компонент в котором кнопка, а уже в this.$parent.$parent — родитель

Alex
27.09.2018
21:12:26
https://vuejs.org/v2/guide/events.html#Why-Listeners-in-HTML

Vlad
27.09.2018
21:13:45
Всем инъекцию реакта