Roman
по поводу моего утверждения о семантике компонентов в Vue я таки правильно понял что в основном стейт компонента должен через value передаваться и мутироваться родителем посредством input события?
Roman
"value" как "нынешнее состояние" другие компоненты как "параметры"
Roman
Да.
в таком случае компонент календаря должен читать выбранные дни и отображаемый месяц (год + месяц) из value а не двух отдельных пропов?
Alexander
напомните, плиз, в глобальном компоненте как получить текст между тегами? <my-comp>как_это_прочитать_в_компоненте?<my-comp>
Stanislav
в таком случае компонент календаря должен читать выбранные дни и отображаемый месяц (год + месяц) из value а не двух отдельных пропов?
А, да это как тебе удобно. Хотя, если ты передаешь объект даты в компонент, то в нем будет и месяц и год :)
Roman
А, да это как тебе удобно. Хотя, если ты передаешь объект даты в компонент, то в нем будет и месяц и год :)
да это понятно, вопрос лишь в разделении выбора дней и самой даты.. value = {date: ..., selectedDays: [...]}
Roman
просто тут проблема производительности возникает я думаю... если добавляется выбранный день, то выстреливает input, который провоцирует передачу нового состояния в value, которая заставляет календарь перерисовываться
Roman
т.е. мы рисуем календарь заново, хотя тот не изменился вовсе, изменились лишь выбранные дни, т.е. тратим лишний CPU time
Sergey
Привет! Подскажите, плиз, как можно кастомизировать во vue-chartjs, легенды ? Может есть у кого ссылка на пример ?
Roman
Если изменился стейт, то и изменилось вью
не совсем.. изменился лишь список выбранных дней, сам по себе календарь остался на том же месяце, а значит нам не нужно заново вычислять его, что собственно и произойдёт..
Stanislav
Но на самом деле, если данные те же - вью не будет перерисовывать элемент (тут надо уточнять)
Roman
Привет! Подскажите, плиз, как можно кастомизировать во vue-chartjs, легенды ? Может есть у кого ссылка на пример ?
насколько я помню (касается не именно легенд, а в общем), это все настраивается в options, а параметры смотреть в доке chartjs
Roman
Но на самом деле, если данные те же - вью не будет перерисовывать элемент (тут надо уточнять)
дело не во Vue render'е, а в вычислениях самого компонента, у него на value watch указан, который перевычисляет календарь при изменении отображаемой даты
Roman
можно конечно хранить копию состояния внутри компонента и проверять, если value соответствует локальной копии то ничего не делать
Roman
дело не во Vue render'е, а в вычислениях самого компонента, у него на value watch указан, который перевычисляет календарь при изменении отображаемой даты
что вы подразумеваете под "перевычисляет календарь"? данные изменяются с календаря, на кой ему перерисовываться
Alexander
$slots?
спасибо
Roman
что вы подразумеваете под "перевычисляет календарь"? данные изменяются с календаря, на кой ему перерисовываться
в календаре две вложенные v-for, на строки и колонки месяца.. у каждого месяца они естественно разные, поэтому когда date меняется - нужно вычислить все колонки, но я уже понял что надо просто хранить в компоненте копию стейта, чтоб распознавать изменился ли value на самом деле или нет
Alex
не совсем.. изменился лишь список выбранных дней, сам по себе календарь остался на том же месяце, а значит нам не нужно заново вычислять его, что собственно и произойдёт..
Отслеживать внутри что изменились только выбранные дни и вызывать другой метод api календарика по программному "довыбору" выбранных дней
Alex
можно и не копировать стейт
Roman
можно и не копировать стейт
я имел ввиду что по сути это тоже самое что и <input v-model="txt"/> т.е. копия текста и в моделе родителя и в самом компоненте
Alex
проброшенное значение из родителя
Roman
проброшенное значение из родителя
но если например не пробросить никакой v-model или :value то поле всё равно же будет работать, а значит там своя копия стейта компонента
Roman
так-же и тут.. если не дать например календарю v-model или :value, то всё-равно можно будет выбирать дни и навигировать по месяцам
Roman
если же не будет в самом компоненте копии его стейта то он тупо замёрнет, ни по месяцам ни полистаешь ни дней не выберешь, он мёртв без input'a родителя
Stanislav
Мне кажется, ты занимаешься преждевременной оптимизацией.
Evgheni
мне кажется он запутался в архитектуре
Roman
Мне кажется, ты занимаешься преждевременной оптимизацией.
я скорее пытаюсь понять и правильно выстроить мышление, чтоб не воротить костылей и прожорливых тварей))
Evgheni
делать локальные копии уже в минус оптимизации
Roman
нет там копии, не рекомендуется изменять параметры НЕ через события
да я и не собирался мутировать propсы, это мне понятно.. я скорее о другом... о том что по сути вижу 2 варианта: 1. хранить состояние в родных переменных самого компонента и перезаписывать их watcher'ами на value 2. читать всё только из value, но тогда полностью зависить от родителя, если родитель не мутирует value то компонент мёртв, не работает
Roman
хотя с другой стороны... зачем нужен работающий компонент (месяца переключаются, дни выбираются) если эти данные всё-равно выбрасываются и никому больше не нужны...
Michael
Коллеги, кто что посоветует в аналоги квазара (просто потому что хочу узнать аналоги)? Надо мобильну версию сделать понативнее, например. Списька есть, но хочется каких-то советов отдуши ваще https://superdevresources.com/vuejs-mobile-frameworks/
Stanislav
ну вот не спеши, подумой... Зачем тебе в календарике стей? Календарик должен: - Показать то, что ему сказали. - Рассказать, если с ним взаимодействовали
Michael
Какой стейт?
анимации, выделения, какие-то временные хери, пролистывания
Michael
на ко чёрт это говно выше выносить
Stanislav
анимации, выделения, какие-то временные хери, пролистывания
А, ну это UI логика и внутрениие переживания календарика. Они к данным отношения не имеют
Michael
есть контракт, апи у компоненты: пропсы и ожидаемые простые как пробка эвенты.
Evgheni
анимации, выделения, какие-то временные хери, пролистывания
это в отдельные пропсы можно засунуть и не парится, дефолтные значения добавить и всё такое в духе
Michael
А, ну это UI логика и внутрениие переживания календарика. Они к данным отношения не имеют
ага. так что стейн нужен. Но его дублирование, -- чуть ли не страшнейшая из зол
Michael
это в отдельные пропсы можно засунуть и не парится, дефолтные значения добавить и всё такое в духе
лол. есть у тебя более пяти компонентов в шаблоне родителя. Там всякой мути 25 шутк. Родителя реально касается только 5. Итого у тебя 20 штук ментального оверхеда. В багах утонешь
Michael
Разделяйте апи и внутреннюю кухню.
Roman
ага. так что стейн нужен. Но его дублирование, -- чуть ли не страшнейшая из зол
думаю да, всё читать из value свойства, ибо в природе не нужен компонент, который работает сам по себе ни с кем не коммуницируя, в природе обычно всегда получают инструкции "сверху" (от родителя)
Stanislav
ага. так что стейн нужен. Но его дублирование, -- чуть ли не страшнейшая из зол
:) Я не говорил, что, допустим, реактивная data не нужна. Стейт для бизнес данных и стейт для UI - это разные вещи. Я говорил о первом.
Roman
а ещё от расширений браузера, стейт-хранилищ и Бог знает чего ещё
у компонента же единственный источник правды это его родитель?
Roman
а откуда тот берёт данные его неинтересует
Michael
у компонента же единственный источник правды это его родитель?
неплохо не быть категоричным и понимать, что приложуху может запросто убить какая-нибудь херня снаружи. Ну это так, ремарка
Michael
А в контексте приложения может быть глобальный стейт, например, вьюекса
Roman
то что компоненты плохо изолированы от внешних воздействий это да, беда, особенно CSS
Stanislav
Это наше "наследие" :)
Michael
аа, ты про изолюцию...
да и не только. В приложуху может намеренно залезть порнобаннер из расширения с вирусом, заменённого днас и прочей ахинеи. Сталкивался на хуйлоаде, -- бывает и такое, а бывает юзеры думают на контору. После глубокого анализа телеметрий получается прикольная бигдата.
Evgheni
А в контексте приложения может быть глобальный стейт, например, вьюекса
хранить в vuex данные, которые нужны родителю календарика, который является его child-ом?
Roman
А в контексте приложения может быть глобальный стейт, например, вьюекса
насколько я знаю компоненты обычно делятся на тупые и умные... календарь в таком случае - тупой, что сказали то и делает, а его родитель, например компонент страницы - умный и читает данные самостоятельно из Vuex'а
Evgheni
Ооо, фаны редаксов ещё и не то могут!
я в курсе, но мы же адекватный народ
Roman
Норм практика. Их по-разнмоу называют, но суть примерно такая, да. Удобно.
да уж, программирование как моделирование мира.. стадом тупых элементов управляет парочка умных))
Roman
только щас это понял? лол
почему-же, всегда знал, лишь повторился)
Michael
да уж, программирование как моделирование мира.. стадом тупых элементов управляет парочка умных))
в более-менее больших проектах норм и не парочкой обойтись. И над ними ещё 5 слоёв можно. Главное, правильно разделять и продумывать контракты. Изолированность наше всё.
Roman
в более-менее больших проектах норм и не парочкой обойтись. И над ними ещё 5 слоёв можно. Главное, правильно разделять и продумывать контракты. Изолированность наше всё.
однако с SSR всё будет плохо... умные компоненты они обычно асинхронны что в принципе не работает с SSR, поэтому для поддержки SSR умными компонентами должны быть сами страницы, а их не много.. issue по этому поводу писал (https://github.com/vuejs/vue/issues/6456) но это далеко не в приоритете
Roman
если например представить что сайт онлайн магазина напичкан разными гридами товаров, каждый из которых грузит определённые категории с фильтрами товаров то к сожалению все данные придётся грузить в компоненте страницы а не в самим компонентах.. что менее "правильно" с точки зрения архитектуры (isolation/encapsulation) но... с SSR не работает (пока-что)