ᛇᛏᛟᚱᛁᛕ
а из одного дочернего в другое?
Ну так что все эти потоки глобальны, что хранилище глобально. Я может чего то не понимаю.
Сергей
Сразу вопрос. Зачем городить хранилище, мутации и прочее если с потока можно просто дергать при желании последнее значение. Чем это выгоднее?
vuex управляет состоянием приложения. Какая вкладка открыта, какой компонент отображается, как именно отображается тот или иной компоненет, как изменить отображение в зависимости от тех или иных действий пользователя, активна кнопка или нет и т.д. Мутации и Экшены нужны в свою очередь для того, чтобы сделать все изменения управляемыми, инкапсулировать состояние и предоставить простой единообразный способ управления всем этим, в том числе и мощный инструмент отладки А основная проблема, которую решают потоки - это конкуренция в асинхронном програмированнии. Скажем, тебе нужно организовать текстовый поиск, при котором происходит запрос к удаленному серверу, можно потратить минут 10 описывая это через колбеки, вводя дополнительные состояния, чтобы запросы передавались не чаще, скажем, одного раза в 2 секунды, чтобы запросы не передавались, если данные поля не изменились, и еще пара проверок, и все это будет крайне утомительно, если не сказать болезненно. С помощью rxjs эта совокупность проблем решается в несколько строк кода. Разные задачи у vuex и rxjs.
ᛇᛏᛟᚱᛁᛕ
vuex управляет состоянием приложения. Какая вкладка открыта, какой компонент отображается, как именно отображается тот или иной компоненет, как изменить отображение в зависимости от тех или иных действий пользователя, активна кнопка или нет и т.д. Мутации и Экшены нужны в свою очередь для того, чтобы сделать все изменения управляемыми, инкапсулировать состояние и предоставить простой единообразный способ управления всем этим, в том числе и мощный инструмент отладки А основная проблема, которую решают потоки - это конкуренция в асинхронном програмированнии. Скажем, тебе нужно организовать текстовый поиск, при котором происходит запрос к удаленному серверу, можно потратить минут 10 описывая это через колбеки, вводя дополнительные состояния, чтобы запросы передавались не чаще, скажем, одного раза в 2 секунды, чтобы запросы не передавались, если данные поля не изменились, и еще пара проверок, и все это будет крайне утомительно, если не сказать болезненно. С помощью rxjs эта совокупность проблем решается в несколько строк кода. Разные задачи у vuex и rxjs.
Спасибо за отличный коммент. Буду вникать.
Vadim
vuex управляет состоянием приложения. Какая вкладка открыта, какой компонент отображается, как именно отображается тот или иной компоненет, как изменить отображение в зависимости от тех или иных действий пользователя, активна кнопка или нет и т.д. Мутации и Экшены нужны в свою очередь для того, чтобы сделать все изменения управляемыми, инкапсулировать состояние и предоставить простой единообразный способ управления всем этим, в том числе и мощный инструмент отладки А основная проблема, которую решают потоки - это конкуренция в асинхронном програмированнии. Скажем, тебе нужно организовать текстовый поиск, при котором происходит запрос к удаленному серверу, можно потратить минут 10 описывая это через колбеки, вводя дополнительные состояния, чтобы запросы передавались не чаще, скажем, одного раза в 2 секунды, чтобы запросы не передавались, если данные поля не изменились, и еще пара проверок, и все это будет крайне утомительно, если не сказать болезненно. С помощью rxjs эта совокупность проблем решается в несколько строк кода. Разные задачи у vuex и rxjs.
Зачем сохранять активность кнопки, отображение компонента или еще какие-то view ориентерованные данные во vuex?
Anonymous
Скриншоты через JS пилить чем? Все так же canvas?
Сергей
Зачем сохранять активность кнопки, отображение компонента или еще какие-то view ориентерованные данные во vuex?
Когда писал, мне показалось излишним городить абстракцию в духе: vuex хранит данные, которые в свою очередь определяют как отображать view.
Сергей
Vadim
@sergeykhorn Мне интересно другое, в чем идея хранить так много данных в сторе, почему не локальный стейт умных компонентов?
ᛇᛏᛟᚱᛁᛕ
Меня смущает непомерное раздувание количества всех этих мутаций по пустякам.
ᛇᛏᛟᚱᛁᛕ
Может я просто еще не проникся...
Alexey
В Краснодаре
опа, земляк
Alexey
о, земляк)
о, земляк
Alex
а говорят тут программистов мало
Alexey
а говорят тут программистов мало
говорят тут работы мало, вот это тема)
Alexey
Но я бы так не сказал
Alexey
И мнение @Fl0pZz что тут он не нашёл бы работу я не разделяю. С его-то опытом
Alex
я пока не проьбовал искать, как переехал сюда работу не менял, так и работаю в своей старой фирме, только теперь удаленно
Сергей
Меня смущает непомерное раздувание количества всех этих мутаций по пустякам.
Штука вот в чем, допустим у тебя есть компонент "Аватарка", у которой есть два состояния: скругленные края и острые, она расположена глубоко в дереве компонентов. Так же есть компоненты "Кнопка", который находится столь же глубоко, но не является ни родителем, ни потомком компонента "Аватарка". Для того, чтобы эта "Кнопка" по нажатию переключала внешний вид "Аватарки" она должна генерировать событие для своего родителя, тот для своего, и так до ближайшего общего родителя, который в свою очередь будет прокидывать в цепочку до "Аватарки" props передаваемый "Кнопкой". И генерацию событий, и передачу свойств прийдется описывать ручками в каждом компоненте. С помощью vuex, все это происходит практически автоматом в пару строк кода. Вот и получется, что вместо ручной синхронизации всего и вся, проще использовать vuex, чтобы сотояние было общее для всего приложения.
Alex
Штука вот в чем, допустим у тебя есть компонент "Аватарка", у которой есть два состояния: скругленные края и острые, она расположена глубоко в дереве компонентов. Так же есть компоненты "Кнопка", который находится столь же глубоко, но не является ни родителем, ни потомком компонента "Аватарка". Для того, чтобы эта "Кнопка" по нажатию переключала внешний вид "Аватарки" она должна генерировать событие для своего родителя, тот для своего, и так до ближайшего общего родителя, который в свою очередь будет прокидывать в цепочку до "Аватарки" props передаваемый "Кнопкой". И генерацию событий, и передачу свойств прийдется описывать ручками в каждом компоненте. С помощью vuex, все это происходит практически автоматом в пару строк кода. Вот и получется, что вместо ручной синхронизации всего и вся, проще использовать vuex, чтобы сотояние было общее для всего приложения.
вот ты не ленивый)
Сергей
вот ты не ленивый)
Я только учусь, потому объясняя часть знаний закрепляю, часть переосмысливаю.))
Michael
ᛇᛏᛟᚱᛁᛕ
Штука вот в чем, допустим у тебя есть компонент "Аватарка", у которой есть два состояния: скругленные края и острые, она расположена глубоко в дереве компонентов. Так же есть компоненты "Кнопка", который находится столь же глубоко, но не является ни родителем, ни потомком компонента "Аватарка". Для того, чтобы эта "Кнопка" по нажатию переключала внешний вид "Аватарки" она должна генерировать событие для своего родителя, тот для своего, и так до ближайшего общего родителя, который в свою очередь будет прокидывать в цепочку до "Аватарки" props передаваемый "Кнопкой". И генерацию событий, и передачу свойств прийдется описывать ручками в каждом компоненте. С помощью vuex, все это происходит практически автоматом в пару строк кода. Вот и получется, что вместо ручной синхронизации всего и вся, проще использовать vuex, чтобы сотояние было общее для всего приложения.
В целом я понимаю почему общий стейт выгоден и оправдан. Читал историю возникновения всех этой Flux архитектуры. Меня смущает что для каждого скругленного уголка в хранилище нужно делать мутацию, которая перезаписывает весь обьект с потрохами. И допустим у нас есть кучка статей и хнранятся они у нас в массиве, нужно поменя их свойство прочитаны они или нет, ведь приходится копировать весь массив потом менять что нужно и записывать обратно. Или я что-то упускаю? Это вобще по памяти эффективно?
Сергей
с темпом развития темы, "учимся" мы постоянно))
Да не, я действительно только учусь, через месяц планирую начать первую работу искать по разработке. До этого фрилансил по ретуши, монтажу и цветокоррекции.))
Michael
Тогда на всякий случай отмечу, что всё подряд в лобалстейте типа вьюекса хранить не стоит. Если есть логика в том, чтобы от него зависело отображение, то лучше "прокидывать" события
Michael
если совсем не получается, тогда да
Vadim
Штука вот в чем, допустим у тебя есть компонент "Аватарка", у которой есть два состояния: скругленные края и острые, она расположена глубоко в дереве компонентов. Так же есть компоненты "Кнопка", который находится столь же глубоко, но не является ни родителем, ни потомком компонента "Аватарка". Для того, чтобы эта "Кнопка" по нажатию переключала внешний вид "Аватарки" она должна генерировать событие для своего родителя, тот для своего, и так до ближайшего общего родителя, который в свою очередь будет прокидывать в цепочку до "Аватарки" props передаваемый "Кнопкой". И генерацию событий, и передачу свойств прийдется описывать ручками в каждом компоненте. С помощью vuex, все это происходит практически автоматом в пару строк кода. Вот и получется, что вместо ручной синхронизации всего и вся, проще использовать vuex, чтобы сотояние было общее для всего приложения.
Да такие изменения стейта я тоже выношу в стор on demand. Я просто подумал что ты все изменения стейта выносишь во vuex.
Michael
допустим, есть тодо список. кнопка добавляет новый кусочек в глобал, этот новый кусочек запускает перерендеринг списка, общий родитель которого с кнопочкой может быть хоть рут.
ᛇᛏᛟᚱᛁᛕ
Тогда на всякий случай отмечу, что всё подряд в лобалстейте типа вьюекса хранить не стоит. Если есть логика в том, чтобы от него зависело отображение, то лучше "прокидывать" события
Есть изящные методики как в этом всем не потеряться? Воркфлоу какой нибудь может. Типа чтобы глянул такой на компонент и сразу видно что да где куда пуляется и принимается
Michael
в глобале есть смысл хранить только бизнес-данные или как там их
Michael
а всё остальное от них зависит.
Michael
я пока ничего кардинально отличающегося от ООП концепции в компонентах не обнаружил. Чуваки просто перенесли существующие идеи с плюсов, джавки и прочее такое
Michael
конкретно у нас есть нюанс с тяжёлыми операциями в ДОМ, где нам помогают фреймы типа вью
Ilya
Штука вот в чем, допустим у тебя есть компонент "Аватарка", у которой есть два состояния: скругленные края и острые, она расположена глубоко в дереве компонентов. Так же есть компоненты "Кнопка", который находится столь же глубоко, но не является ни родителем, ни потомком компонента "Аватарка". Для того, чтобы эта "Кнопка" по нажатию переключала внешний вид "Аватарки" она должна генерировать событие для своего родителя, тот для своего, и так до ближайшего общего родителя, который в свою очередь будет прокидывать в цепочку до "Аватарки" props передаваемый "Кнопкой". И генерацию событий, и передачу свойств прийдется описывать ручками в каждом компоненте. С помощью vuex, все это происходит практически автоматом в пару строк кода. Вот и получется, что вместо ручной синхронизации всего и вся, проще использовать vuex, чтобы сотояние было общее для всего приложения.
я как то костылил и делал event bus для этого)
Michael
остальное классика
Сергей
И тогда при записи arr[12] = 13 не будет реактивности
Что-то я потерялся. Ты ведь это делаешь не через мутацию.
ᛇᛏᛟᚱᛁᛕ
Что-то я потерялся. Ты ведь это делаешь не через мутацию.
Да. И getter использующий этот arr не хочет что-то обновляться в таких ситуациях. Я делаю копию этого массива изменяю пишу назад, тогда все фурычит. Я ошибаюсь?
Michael
Есть изящные методики как в этом всем не потеряться? Воркфлоу какой нибудь может. Типа чтобы глянул такой на компонент и сразу видно что да где куда пуляется и принимается
смотри выше пример с тодо. У тебя есть важные данные типа списка тодо, количество товаров в корзине, конфиг пользователя (тёмна тема, белая тема), остальное что зависит от этих штук, вешается на это как на пропсы, но как можно логичнее и гибче
Michael
если что-то содержит данные, которые триггерят что-то совсем вовне и есть нужа в глобалах, -- проверьте архитектуру. Та же тема, что когда-то была с пиханием всего в window/global
Michael
мутации же нужны чтобы вс раоту с этим глобалом вынести в отдельный скрипт
Michael
а не раскидывать работу с глобалом по приложухе
ᛇᛏᛟᚱᛁᛕ
мутации же нужны чтобы вс раоту с этим глобалом вынести в отдельный скрипт
Ну у меня почему то вышло в основном что 50% мутаций это тупо запись какой нибудь штуки в стейт. Потому это меня и засмущало. Я с ангуляра первого просто приехал, может сказываются старые привычки просто.
Michael
ещё иногда кажется удобней впихнуть всё в глобал для SSR, но сие не есть гуд.
Michael
представь ситуацию
Michael
есть у тебя 100500 компонентов и 250 скриптов поверх
Michael
у тебя, например, приложуха для чуваков из wall street
ᛇᛏᛟᚱᛁᛕ
а как должно быть?)
Вот это то мне и хочется уложить в голове
Michael
и тут такой раз
Michael
и у тебя кнопка почернела
Michael
а шрифт черный
Michael
тебя негры оттуда засудят
Michael
сразу по двум статьям
Michael
как быть?
Michael
что случилось?
ᛇᛏᛟᚱᛁᛕ
тебя негры оттуда засудят
Они скажут, уау чувак, ты молодец, ты за черных :)
Michael
какая-то компонента из последних, возможно, коммитов
Michael
перезаписывает глобал, который отвечает за цвет
Michael
теперь задачка на смекалку
Michael
какая же компонента?
Michael
как дебажить?
Michael
а часики-то тикают, бабки не крутятся, чуваки с волстрит не понимают где сохранить, где отменить
Michael
grep ? ::D
ᛇᛏᛟᚱᛁᛕ
какая-то компонента из последних, возможно, коммитов
мне кажется в вопросе содержится ответ. Но в целом ситауция ясна.
Michael
из 100500 будешь на улице искать после того как с работы уже сфайрят и с хаты выпердолят)
Michael
плюс если всякие гугл таг манагеры, например, запускают свои глобалхеровины, а у тебя там где-то что-то важное меняется, представляешь
Michael
бдсм получается. а со всеми записями в глобал в отдельных модулях мутаций всё более-менее на ладони. Плюс, вью-реакт-отладчики спешат на помощь
Michael
обожаю крайности ЖВ
Taras
Такой вопрос: у меня модули, которые я мёржу в один стор, как из одного модуля получить доступ к геттерам другого модуля?
Rafael 🌵
Ну а вообще я говорил, про начало моей карьеры
Alexey
Угадай, какой к меня опыт сейчас
я думаю ты мидл. Как бы не обидеть)
Rafael 🌵
Rafael 🌵
4 месяца назад я бы не нашёл работу не в москве