Demetrio
Наименее костыльный, явный и привычный всем вариант - плагин, но если там одну переменную шарить и жалко в плагин оборачивать, то кроме рута и деться некуда
Demetrio
Но потом жди мата и ругательств от такой неявной штуки
Roman
пока-что реализова в руте... думаю: $root.__uic_scrollable_nativeScrollbarWidth не должно создавать конфликтов с юзерским кодом
Roman
слишком рандомное название
Roman
вообще как бы отличается)
требовать Vuex ради, извиняюсь, сраной переменной... это маньячество
Roman
вообще как бы отличается)
однако, Vuex это всего лишь замена $root которая обезопасывает мутации Vuex.state это такой-же $root с точки зрения глобальных переменных, коллизию с пользовательским кодом не избежать, можно лишь сделать её менее вероятной рандомизировав название переменной
Roman
но если разработчику приложения использующему данный компонент взбредит в голову назвать какую либо переменную своего приложения именно: "__uic_scrollable_nativeScrollbarWidth" то неизбежно бомбанёт
Roman
однако вероятность низка. Кстати вероятность коллизии именно в $root даже ниже чем в Vuex, поскольку (надеюсь) никто не использует $root для application state management'а, а вот Vuex засорять уж точно не надо
‌‌‎D
не будет коллизий в $root, так будут коллизии в Vuex.state, что гораздо хуже
Коллизии не будет во Vuex если поставить флаг namespaced: true
Roman
Коллизии не будет во Vuex если поставить флаг namespaced: true
а, так в Vuex есть пространства имён? прикольно, не знал. Но тем не менее не повод требовать зависимости Vuex ради одной глобальной переменной
‌‌‎D
а, так в Vuex есть пространства имён? прикольно, не знал. Но тем не менее не повод требовать зависимости Vuex ради одной глобальной переменной
Согласен. Ради одной переменной устанавливать вьюекс. Это было к сведению. Почему бы тебе не использовать замыкание в отдельном файле для твоей задачи?
‌‌‎D
не совсем понял что ты имеешь ввиду, замыкание в отдельном файле?
Тебе нужна переменная которая будет доступна для других компонентов и они могут ее значение получать/мутировать. Я тебя правильно понял?
‌‌‎D
Она статичная
Roman
верно
Roman
точнее, не "константная", ибо она вычисляется в момент инициализации инстанции компонента, а именно статичная (static class field)
‌‌‎D
верно
Создай файл: export const staticValue = 1
Roman
Создай файл: export const staticValue = 1
это константная, не статичная
Roman
инстанцироваться компонент может сколько угодно, но я хочу предотвратить повторное вычисление совместной переменной
Roman
чтоб первая инициализация установила переменную, а последующие просто её считывали
‌‌‎D
это константная, не статичная
Тогда можно создать по шаблону revealing module pattern
Roman
что я сейчас и делают в root
‌‌‎D
С геттерами и сеттерами
‌‌‎D
Никто не сможет смутировать ее случайно
‌‌‎D
Она живет своей отдельной жизнью в своем файле
‌‌‎D
Все твои требования исполняет
‌‌‎D
Рут, вьюекс не засоряешь
Roman
хмм, ща загуглю
Roman
Тогда можно создать по шаблону revealing module pattern
создаём файл, в котором экспортируем объект, в котором храним данные, и мутируем/читаем эти данные импортируя файл в компонент, не разглашая тем самым внутренности компонента в глобальном контексте приложения, гениально!
Roman
мерси!
‌‌‎D
мерси!
Не проблема
Александр 🌲🙏🏽
Ребята, разбираю сурсы одного проекта.
Александр 🌲🙏🏽
Александр 🌲🙏🏽
Что есть get?
Александр 🌲🙏🏽
Это computed так вынесено или что это?
Александр 🌲🙏🏽
Почему так оформлено?
Rafael 🌵
Что есть get?
это геттер из es5
Александр 🌲🙏🏽
Я просто в JS не так давно зашел.
Александр 🌲🙏🏽
Поэтому путаюсь в разных редакциях.
Rafael 🌵
просто автор дибил и не смог понормальному написать этот кусок
Александр 🌲🙏🏽
А как лучше написать?
Rafael 🌵
первое - добавить кеширование
Александр 🌲🙏🏽
Вот например нижний геттер. Нахрена вообще его так оформлять?
Rafael 🌵
второе, действительно вынести в computed
Александр
+ насчет computed
Александр 🌲🙏🏽
А добавит ькеширование это чо зачит?
Rafael 🌵
Вот например нижний геттер. Нахрена вообще его так оформлять?
он просто хотел сделать привязку к this конкретного объекта
Rafael 🌵
чтобы не передавать id items как параметр
Rafael 🌵
точнее чтобы впринципе не добавлять id 🤷‍♂️
Rafael 🌵
странное решение конечно
Alex
И ни одного комментария, поясняющего эти странные решения)
Александр 🌲🙏🏽
А если в компьютед также вынести этот подсчет суммы общей, исходя из элементов массива.
Rafael 🌵
А добавит ькеширование это чо зачит?
это значит, что пересчитывать get total_price не при каждом запросе, а только при изменении
Александр 🌲🙏🏽
Или чо там есть еще watch.
Rafael 🌵
и в сулчае использования computed тебе вообще не придется выполнять этот пунтк
Александр 🌲🙏🏽
Они с computed как раз этим и отличаются же?
Александр 🌲🙏🏽
Что воч каждый раз делает.
Александр 🌲🙏🏽
А компьютед думает.
Rafael 🌵
Они с computed как раз этим и отличаются же?
нет, там разница идеологическая: computed - когда тебе важен не только факт изменения значения, но и новое значение вотчер же нужен только есть тебе нужен сам факт изменения значения, но на значение, можно сказать, пофиг
Александр 🌲🙏🏽
Ну в воче все равно можно вычислять значение. =)
Александр 🌲🙏🏽
Просто это костыль и неправильно.
Rafael 🌵
Александр
вотч это как обсервер
Александр 🌲🙏🏽
Ну я перечитал да.
Александр
он наблюдает за значением
Александр 🌲🙏🏽
Но он же обсервит и потом какое-то действие предпринимает все равно.
Александр
и вызывает какой то коллбек когда значение меняется
Rafael 🌵
Ну я перечитал да.
ну ты понял что ни тот ни тот не является никаким костылем?
Александр 🌲🙏🏽
Ну всмысле, что реализовывать через воч то, что реализуется через компьютед — костыль.
Rafael 🌵
еще раз перечитай мое сообщение
Александр
как ты собрался через watch реализовывать то что реализуется через computed ?)
Александр 🌲🙏🏽
И ведь перечитал. =)
Александр 🌲🙏🏽
Да я и не собрался пока.
Александр 🌲🙏🏽
Просто компьютед я юзал, а воч нет. =)
Александр 🌲🙏🏽
И поэтому пока нету понимания.
Александр 🌲🙏🏽
Но я стараюсь. Почитаю еще раз документацию.