@vuejs_ru

Страница 2826 из 3900
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
На самом деле вопрос только в том, какова цель такого представления информации.

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

Evgeny
07.05.2018
06:17:54
Абсолютно разные, у тебя видимо где-то они связаны
Т.е. каждый объект пользователя находится в своём сторе?

если они в одном сторе, то моя проблема всё ещё существует

Иван
07.05.2018
06:18:15
Т.е. каждый объект пользователя находится в своём сторе?
Блеать, у тебя стрикт мод включен или нет?

Evgeny
07.05.2018
06:19:20
Блеать, у тебя стрикт мод включен или нет?
нет. Но это же позволяет гарантировать только, что все изменения будут проходить через мутации

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
У тебя пересчет на каждый элемент вызывается или на все новые объекты сразу?
добавляю 1 элемент - перерассчитывает всё, что сейчас на странице

freekzy
07.05.2018
06:20:06
добавляю 1 элемент - перерассчитывает всё, что сейчас на странице
Блокируй computed пока все данные не подгрузишь в объект.

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

Evgeny
07.05.2018
06:20:43
Блокируй computed пока все данные не подгрузишь в объект.
добавляю порцию данных из 20 элементов - перерассчитывает всё, что сейчас на странице - 300

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

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
если это тупо компонент для вывода, мб поможет v-once , хотя в данном случае это костыльи его лучше не юзать как правило
данные пользователя могут меняться. Но вот если не меняются, пересчитывать ничего не хочется

Google
Иван
07.05.2018
06:26:59
Мне тоже кажется что проблема в алгоритме

По идее компутеды должны понимать что обращение идет не ко всему объекту, а к его элементу конкретному

И сет, который этот элемент не трогает их триггерить не должен

K
07.05.2018
06:28:30
И сет, который этот элемент не трогает их триггерить не должен
Вот хз, может с массивами так а не с объектами

Evgeny
07.05.2018
06:28:35
И сет, который этот элемент не трогает их триггерить не должен
сет трогает родителя. А мы везде используем родителя для получения конкретного пользователя по ID

сет трогает родителя, если такого ключа нет. иначе да, меняет конкретный элемент

т.е. при добавлении в массив или объект нового элемента мы говорим, чтобы всё пересчиталось, т.к. изменился главный объект

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

Vladyslav
07.05.2018
06:31:57
данные пользователя могут меняться. Но вот если не меняются, пересчитывать ничего не хочется
http://dl3.joxi.net/drive/2018/05/07/0027/2572/1776140/40/9ca22427dc.jpg Смотри, мб ты делаешь цикл по объекту. Объект в js с ключами-цифрами не хранит порядок. Ты добовляешь элемент, так как он падает не обязательно в конец объекта, vue перерендеривает все

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

DimenSi
07.05.2018
06:46:17
Или там наоборот, => id => state, не помню
Сначала функция получает стейт, а потом аргументы

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

Иван
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
реактивность не так работает

Страница 2826 из 3900