
Evgeny
07.05.2018
06:07:40
есть объект с пользователями. Там 300 штук. Добавляем 301 - на странице весь список из 301 пользователя пересчитывается
все cumputed сбрасываются

Иван
07.05.2018
06:08:12
Ну вообще это логично, если они у тебя от всего массива зависят

Evgeny
07.05.2018
06:09:34
есть массив с ID, а есть объект, в котором хранятся пользователи, которые я хочу получать по ID. Массив меняется, а вот в объект users, например, есть только добавление

Google

Evgeny
07.05.2018
06:10:14
но т.к. добавление меняет сам объект users, то запускается реактивность на все computed, где был использован этот объект.
А по сути мне не нужна реактивность у users, мне нужна реактивность у каждого пользователя отдельно.
users - это как просто хранилище всех пользователей для доступа к ним из любого места по ID

Иван
07.05.2018
06:12:07
Ну я знаю, да

Evgeny
07.05.2018
06:12:14
Вывод у вью видимо прост - не использовать нормализованные данные

Costa
07.05.2018
06:12:39
Можно спросить? Вычисления производятся с целью показать _прямо_сейчас_ все нужные расчеты?
Все 300 юзеров?
Зачем рассчитывать их всех?

Иван
07.05.2018
06:13:23
Стрикт включен?

freekzy
07.05.2018
06:13:56
Со strict то понятно.
Это dev only
Причем в доках об этом черным по белому сказано.

Google

Evgeny
07.05.2018
06:14:19
Зачем рассчитывать их всех?
lazyload? Вывел 20 пользователей. нажал на кнопку - подгрузил ещё 20. Мне не нужно всех расчитывать, мне нужно добавлять по 20 на страницу

Costa
07.05.2018
06:14:42
пагинация.

Иван
07.05.2018
06:15:03
Проблема в другом у человека

Costa
07.05.2018
06:15:08
Ок.

Иван
07.05.2018
06:15:38
Как минимум менять бесконечный список на пагинацию не оч правильно со стороны бизнеслогики

Evgeny
07.05.2018
06:15:48
пагинация.
Это не выход. Пагинация не подходит. Нужен бесконечный список. И страницу с пользователями я привёл просто в пример. А представим ленту новостей или картинок. Какая пагинация?

Иван
07.05.2018
06:15:57
У тебя стрикт выключен?

K
07.05.2018
06:16:11
Ну а можно разделить юзеров на разные объекты и в массиве иметь ид и вызывать их по ид, при show или create?

Costa
07.05.2018
06:16:21
На самом деле вопрос только в том, какова цель такого представления информации.

Evgeny
07.05.2018
06:16:49

K
07.05.2018
06:17:25
Абсолютно разные, у тебя видимо где-то они связаны

Evgeny
07.05.2018
06:17:54
если они в одном сторе, то моя проблема всё ещё существует

Иван
07.05.2018
06:18:15

K
07.05.2018
06:18:38

Evgeny
07.05.2018
06:19:20

freekzy
07.05.2018
06:19:28

Evgeny
07.05.2018
06:19:29

Иван
07.05.2018
06:19:47
Стрикт просто очень сильно может затормозить всё

Google

Vladyslav
07.05.2018
06:19:49
у меня подобная задача, бесконечный листинг элементов и все хорошо работает, когда это эррей объектов

Evgeny
07.05.2018
06:19:50

freekzy
07.05.2018
06:20:06

Evgeny
07.05.2018
06:20:07

freekzy
07.05.2018
06:20:35
У тебя рендер тормозит получается.

Evgeny
07.05.2018
06:20:43

freekzy
07.05.2018
06:20:59

Evgeny
07.05.2018
06:21:21

freekzy
07.05.2018
06:21:43
Уточняющий вопрос: 20 раз перерасчет идет по 300+n или 1 раз при 300+20?

Evgeny
07.05.2018
06:22:12
1 раз
каждый раз перерасчитывает всё на странице
если есть 300 пользователей и добавляю 20, то перерасчитывает 320

Rafael
07.05.2018
06:22:42

Evgeny
07.05.2018
06:22:43
хотя 300 не менялись
а если будет 1000 и добавлю 1, то пересчитает 1001

freekzy
07.05.2018
06:24:03
Брось кусок кода.
А то с просонья думается тяжело)

Vladyslav
07.05.2018
06:25:13
хотя 300 не менялись
cможешь позже кинуть код посмотреть, пробелма какая-то есть
у меня сложные элементы, многие со слайдерами, и все работает быстро
обновляются только новые
если это тупо компонент для вывода, мб поможет v-once , хотя в данном случае это костыльи его лучше не юзать как правило

Evgeny
07.05.2018
06:26:55

Google

Иван
07.05.2018
06:26:59
Мне тоже кажется что проблема в алгоритме
По идее компутеды должны понимать что обращение идет не ко всему объекту, а к его элементу конкретному
И сет, который этот элемент не трогает их триггерить не должен

K
07.05.2018
06:28:30

Evgeny
07.05.2018
06:28:35
сет трогает родителя, если такого ключа нет. иначе да, меняет конкретный элемент
т.е. при добавлении в массив или объект нового элемента мы говорим, чтобы всё пересчиталось, т.к. изменился главный объект

K
07.05.2018
06:30:04
Я бы сначала поменял объект юзеров на массив юзеров и звал по хэшу?

Evgeny
07.05.2018
06:30:12

Vladyslav
07.05.2018
06:31:57

Evgeny
07.05.2018
06:32:38

Vladyslav
07.05.2018
06:33:26
тогда как сможешь кинуть код - будет интересно посмотреть, так больше не подскажу

Иван
07.05.2018
06:34:45
Хм. А пересчитывается каждый раз именно компутед или геттер?

K
07.05.2018
06:37:38
Я тоже думаю что проблема в жирном обьекте

Evgeny
07.05.2018
06:40:58
вот элементарный пример

Иван
07.05.2018
06:42:20
Ну ясен красен
Там по идее надо бы получение this.$store.state.foo[this.id] вынести в отдельный компутед
А foo его результаты использует
И тогда вся логика в foo пересчитываться не будет пока реально объект не поменяется
А ещё лучше делать все это геттером в сторе

Google

Evgeny
07.05.2018
06:44:16
пробовал геттером

Иван
07.05.2018
06:44:21
Типа byId = state => id => state.foo[id]
Или там наоборот, => id => state, не помню

DimenSi
07.05.2018
06:45:02

freekzy
07.05.2018
06:45:20

Иван
07.05.2018
06:45:34
bladskii vui

Evgeny
07.05.2018
06:46:12

DimenSi
07.05.2018
06:46:17

Иван
07.05.2018
06:47:09
так он и так в отдельном. Не?
Ну вот как бы если у тебя в компутеде чисто получение объекта из стора, не может быть что б 300 таких компутедов 3 секунды занимало

Evgeny
07.05.2018
06:47:26

Иван
07.05.2018
06:47:33
А все зависимые компутеды пересчитываться не будут если объект тот же самый вернулся
Смотря каких

Evgeny
07.05.2018
06:47:46
объект тут только 1 - foo родителя
а он при добавлении меняется
и геттеры не спасают

Иван
07.05.2018
06:48:04
Вообще, 300 компутедов в страшном сне 3 секунды пересчитываться не могут
Нет
Объект - это foo[id]
Его надо компутедом получать

Evgeny
07.05.2018
06:48:25
реактивность не так работает