Michael
см. доки по нему внимательно
Sergey
Я пишу на Ангуляре и немного в шоке от вышесказанного (много) Крайне неразумно делать такие выводы, исходя из статей или как-то либ (кстати что за либы?)
Andy
но как можно подвязать v-model дочернего компонента на пропс? разве это не то же самое, что мутировать пропсы?
Stanislav
народ, очень нужно ваше авторитетное мнение, подскажите правильный паттерн для такой ситуации: 1) Имеем множество компонентов типа “User”, “Product” и прочее, у них у всех есть свои локальные данные типа “Name”, “Phone”, “Price” и т.д, получаемые по API 2) Эти компоненты имеют “детей”, которые должны иметь возможность менять как-то эти данные для родителя, например, компонент “ProductInfo”, который имеет большую форму на 20 полей, данные которой должны соответствовать данным родителя и быть изменяемыми. 3) Сделать так, чтобы поля формы “ProductInfo” были подвязаны на props родителя - так себе вариант: - v-model не поюзаешь, пропсы мутировать нельзя - на каждое изменение некоторого поля надо эмитить ивент родителю?… 4) Сделать через computed setter: даже не представляю как, ведь данные хранятся в родителе, в пропсах, их мутировать нельзя в любом случае. Vuex тоже тут так себе помощник, this.state.user_name = … делать нельзя, а писать какие-то хитровыдуманные мутации “на все случаи жизни” тоже как-то некрасиво получается 5) Остается один вариант: при маунте (или когда мне нужно) дочернего компонента ProductInfo СКОПИРОВАТЬ данные полученные в пропсах от родители Product в локальные, мутируемые данные, далее делать с ними что хочешь, редактировать, дергать урлы АПИ, и прочее, и может только потом (при успешном сохраненнии) сообщать родителю актуальные данные (или просить его рефрешнуться) Правильный ли это подход (№5)? Есть ли какие-то более чистые альтернативы? Напоминаю, цель - удобная работа с формами на много полей…
Так? <product> <product-info> <field> <field>
Andy
да
Stanislav
да
Данные запрашиваешь в <product> и спускаешь по просам вниз?
Andy
пропсы вниз, эвенты вверх.
ивент на изменение каждого каждого инпута?
Andy
в дочернем компоненте?
Michael
ага
Michael
и менять уже данные исходя из информации в ивенте.
Michael
Идея 1в1 как с обычным хтмл и ванилажс
Andy
тогда мне надо родителю передавать и новое значение, и название поля, которое меняется?) потому что в противном случае я ж не буду писать разные обработчики для каждого инпута? это типа считается норм практика?
Andy
Product ({name: ‘Ololo’, price: 120}) ProductInfo (props: [name, price])
Nikita
2000 members 🔥
Andy
допустим, я хочу это сделать как говорит @houd1n1 <ProductInfo> <input type=“text” name=“description” v-on:input=“emitInputChange(event.target.value, ‘description’)”> </ProductInfo> где обработчик делает примерно следующее: emitInputChange(newValue, fieldName) { this.$emit(‘inputValueChange’, {field: fieldName, value: newValue}); } тогда родитель может одинаково обработать изменения каждого инпута и сам поменять значения в своих локальных данных? <Product> <ProductInfo v-on:inputValueChange=“handleChange” / > </Product> так это задумано?
Michael
Ровно так и задуман концепт one day data fllow
Andy
хорошо, но а что если пользователь поколбасил поля, а потом передумал их сохранять и хотел бы “сбросить” все это? Придется вызывать рефетч данных компонента Product?
Andy
Либо компонент-родитель Product для таких целей должен был бы хранить копию своих же данных на случай необходимости “сбросить” их? Ну, интересуюсь просто как это “принято” делать
Michael
Главное, как можно более явно
Michael
чтобы понятно было
Alex
да хрен его знает, там измнеений не так уж и много
Зато наконец файлы тестов, лежащие рядом с компонентами в бандл попадать не будут!)
Anonymous
2 куска) Поздравляю)
Anonymous
Желаю всем что бы зарплаты росли так же как численность в этой группе.
Demetrio
отвернулся, а у вьютифай русская дока появилась
Michael
Для этого надо двигать наше дело как ФИшер двигал шахматы)
Demetrio
чет библиотечка прям на глазах хорошеет
Demetrio
надеюсь что станет популярной как елемент уи
Demetrio
хм, а с подчиненными сработает?
Demetrio
https://next.vuetifyjs.com
Sasha
Сенк
Sasha
Больше всего бомбит от того что vuetify не юзает свои префиксы для стилей. Постоянно конфликтует со стилями приложения.
Denys
А разве scope стили не будут решать эту проблему? ты же про наименования классов?
Bakir Aitkul
народ, очень нужно ваше авторитетное мнение, подскажите правильный паттерн для такой ситуации: 1) Имеем множество компонентов типа “User”, “Product” и прочее, у них у всех есть свои локальные данные типа “Name”, “Phone”, “Price” и т.д, получаемые по API 2) Эти компоненты имеют “детей”, которые должны иметь возможность менять как-то эти данные для родителя, например, компонент “ProductInfo”, который имеет большую форму на 20 полей, данные которой должны соответствовать данным родителя и быть изменяемыми. 3) Сделать так, чтобы поля формы “ProductInfo” были подвязаны на props родителя - так себе вариант: - v-model не поюзаешь, пропсы мутировать нельзя - на каждое изменение некоторого поля надо эмитить ивент родителю?… 4) Сделать через computed setter: даже не представляю как, ведь данные хранятся в родителе, в пропсах, их мутировать нельзя в любом случае. Vuex тоже тут так себе помощник, this.state.user_name = … делать нельзя, а писать какие-то хитровыдуманные мутации “на все случаи жизни” тоже как-то некрасиво получается 5) Остается один вариант: при маунте (или когда мне нужно) дочернего компонента ProductInfo СКОПИРОВАТЬ данные полученные в пропсах от родители Product в локальные, мутируемые данные, далее делать с ними что хочешь, редактировать, дергать урлы АПИ, и прочее, и может только потом (при успешном сохраненнии) сообщать родителю актуальные данные (или просить его рефрешнуться) Правильный ли это подход (№5)? Есть ли какие-то более чистые альтернативы? Напоминаю, цель - удобная работа с формами на много полей…
Можно сделать :prop.sync
Anonymous
ребзя, а как мне из вью влиять на набор стилей тега body? инитить корневой компонент с него нельзя же
Anonymous
то есть тупо повесить на него шото вроде :class="cond?'class_when_true':''" нельзя
Anonymous
можно, но не будет работать
Dmitry
https://www.youtube.com/watch?v=gsffg5xxFQI - Clojure в JS
А вот VueJS в ClojureScript https://github.com/Gonzih/glue
Oleksandr
можно, но не будет работать
Будет. Если рендерить бади)))
Anonymous
так вуй посылает наюух если крепить корневой компонент в бади
Bakir Aitkul
так вуй посылает наюух если крепить корневой компонент в бади
А если сделать корневой компонент единственным в боди <body> <div id="app"></div> </body>
Anonymous
А если сделать корневой компонент единственным в боди <body> <div id="app"></div> </body>
и что? директивы вуя в таком случае на бади не распространяются
Anonymous
судя по всему @c01nd01r прав
Stanislav
судя по всему @c01nd01r прав
Никак ты из vue не повлияешь на body
Bakir Aitkul
и что? директивы вуя в таком случае на бади не распространяются
Перенеси стили body в корневой компонент, а боди будет просто как wrapper
Максим
Кто-нибудь билдер реализовывал для Vue компонентов?
Данияр
Добрый вечер) вьюшки)
Антон
2к найс )
Данияр
Кто знает хорошие курсы по vue 2?
Stanislav
блед
Michael
bode builder
Данияр
Захотел изучить. js знаю так в среднем) базовый
Michael
потом в доки просто ныряй от вью
Michael
профит
Данияр
Мм..
Данияр
😢
Michael
Андрей
Либо компонент-родитель Product для таких целей должен был бы хранить копию своих же данных на случай необходимости “сбросить” их? Ну, интересуюсь просто как это “принято” делать
Имхо при таких вещах через ивенты или v-model уже не вариант в виду большого количества полей дочерней формы и потому что это лишняя нагрузка, которой можно избежать, я бы рекомендовал юзать екшены, данные родителя хранить в сторе, при, как ты говоришь, колбасе пользователем дочерней компоненты, поосто валидировать, если всё ок и пользователь не передумал, тогда 1 раз вызываешь екшен с пейлодом, экшн меняет даныые через мутации в сторе вот и всё
Андрей
И данные будут реактивно сменены в паренте
Андрей
Т.е. проблемы то по сути и нет, схема типичная как в мануалах vuex
Stanislav
Еее, vuex!
Андрей
Ну а чё? )) по-моему сильно заморочился человек, ну сложная композиция, ну есть паренты и чайлды, в которых чё-то делается и надо наверх