Size: a a a

Vue.js Russian Developers Community

2020 August 14

MO

Madiyar Orazaly in Vue.js Russian Developers Community
Потом сабмитить этот новый объект
источник

s

scmutalisk in Vue.js Russian Developers Community
Константин
сейчас попробую.. но чтото чувствую что он тоже заменит мой прототип в этом пустом объекте на вьюшный как и  Object.assign
надеюсь ты меняешь стейт через мутации, экшны?
источник

К

Константин in Vue.js Russian Developers Community
scmutalisk
надеюсь ты меняешь стейт через мутации, экшны?
да
источник

К

Константин in Vue.js Russian Developers Community
Madiyar Orazaly
Как я понял, тебе надо в форму в инпутах прописать value из твоего прототипа, а на @change повесить this.$set на новый объект
что Вы имеете в виду под новым объктом?
объект всегда один. Есть state.param - пустой, но с набитым кастомным прототипом дефолтных свойств
источник

А

Антон in Vue.js Russian Developers Community
Константин
а есть разница по сравнению с Object.assign?
Нет, но новый синтаксис приветствуется.
источник

s

scmutalisk in Vue.js Russian Developers Community
Константин
что Вы имеете в виду под новым объктом?
объект всегда один. Есть state.param - пустой, но с набитым кастомным прототипом дефолтных свойств
new Object или {}
и потом в него добавлять все что нада через this.$set
источник

MO

Madiyar Orazaly in Vue.js Russian Developers Community
Константин
что Вы имеете в виду под новым объктом?
объект всегда один. Есть state.param - пустой, но с набитым кастомным прототипом дефолтных свойств
Компонент где ты сабмиттишь форму
источник

MO

Madiyar Orazaly in Vue.js Russian Developers Community
Создай там объект
источник

К

Константин in Vue.js Russian Developers Community
Madiyar Orazaly
Компонент где ты сабмиттишь форму
Вы имеете в виду записывать изменения в отдельный объект?
Но этот стейт используется и в других компонентах... там нужны изменения введённые пользователем тоже... для того и vuex
источник

К

Константин in Vue.js Russian Developers Community
сейчас попробую накидать песочницу..
источник

MO

Madiyar Orazaly in Vue.js Russian Developers Community
Константин
Вы имеете в виду записывать изменения в отдельный объект?
Но этот стейт используется и в других компонентах... там нужны изменения введённые пользователем тоже... для того и vuex
Ну в @change пропиши и мутацию для вьюкса
источник

К

Константин in Vue.js Russian Developers Community
Madiyar Orazaly
Ну в @change пропиши и мутацию для вьюкса
так мутация - или вытирает мой изначальный прототип... или сбивает реактивность... сохранить и прототип и реактивность - в этом и изначальная потребность
источник

MO

Madiyar Orazaly in Vue.js Russian Developers Community
Крч ждём песочницу
источник

НН

Никита Наумов... in Vue.js Russian Developers Community
В свое время в ангуляре использовал их стор NgRx. Так вот, создатели этой либы у себя писали, что они против прототипов ибо стор это про обычные объекты без прототипов, а прототипы сожержат методы которые относятся уже к другому паттерну изменения данных. Может у вьюикс похожая философия и не следует хранить прототипы в сторе?
источник

НН

Никита Наумов... in Vue.js Russian Developers Community
Если нужны методы можно их сделать статическими и вызывать не из экземпляра класса а из самого объекта класса, указывая объект, над которым нужно произвести изменения.
источник

НН

Никита Наумов... in Vue.js Russian Developers Community
Я не чисто вуист, перешел недавно, месяца два назад
источник

К

Константин in Vue.js Russian Developers Community
Madiyar Orazaly
Крч ждём песочницу
https://codesandbox.io/s/admiring-taussig-xx34m

state.setting в main.js - пустой объект с неким прототипом дефолтных значений

component1 - форма на 2 поля, которая в инпутах выводит в value settings.param1 и  settings.param2 соответственно (значения подтягиваются из прототипа, всё ок)

component 2 - рендер значений state.settings на страницу, чтобы видеть их актуальное значение именно в vuex хранилище, а не локальное состояние из компонента1

component 3 - рендер state.settings объекта преобразованного в JSON , чтобы видеть, какие свойства принадлежать именно самому объекту, а не прототипу объекта.


Проблема.
Когда в компоненте1 мы делаем меняем значение в одном из инпутов - срабатывает @input событие, которое успешно перезаписывает это свойство внутри объекта settings, делая его явным (попадает в JSON теперь). Но при этом весь изначальный прототип дефолтных свойств стирается  (видно, что пропадает значение соседнего поля, - или можно по в консоли посмотреть, что изначального моего прототипа state.settings больше нет)

А мне нужно чтобы
- и реактивность сохранялась (компонент2 обновлялся)
- и изначальный мой прототип сохранялся (не вытирались дефолтные данные из полей 1 компонента)
- и в итоговый JSON попадал не весь прототип ЦЕЛИКОМ, а только перезаписаенные пользователем данные
источник

НН

Никита Наумов... in Vue.js Russian Developers Community
Так что возможно мои идеи из «угловатого» не подходят для «прогрессивного «
источник

К

Константин in Vue.js Russian Developers Community
Никита Наумов
В свое время в ангуляре использовал их стор NgRx. Так вот, создатели этой либы у себя писали, что они против прототипов ибо стор это про обычные объекты без прототипов, а прототипы сожержат методы которые относятся уже к другому паттерну изменения данных. Может у вьюикс похожая философия и не следует хранить прототипы в сторе?
Да, то что я хочу, похоже явно не вью-вэй...
но очень нужно ))
Прототипы - отлично решение быстро на лету менять не только эти дефолтные значения но и быстро добавлять новые и удалять старые, не прописывая миллион геттеров и не заботясь, где там в глубине, что отпало.

А изначальная цель вообще следующая:
есть скажем 200 настроек у которых есть дефолтные значения. Их нужно отобразить пользователь. Каждый пользователь изменит себе ну от силы 2-5 настроек. А остальные останутся дефолтными. Поэтому и хочу дефолтные хранить в приложении в прототипе объекта, а в бд отправлять только те, что были перезаписаны пользователем, чтобы не отправлять в базу все 200 настроек для каждого пользователя, хотя по сути нужных перезаписано 5.

Может есть какой то другой способ добиться нужного результата проще? без прототипов?
источник

A

Alexei in Vue.js Russian Developers Community
Подскажите, а какие события должны срабатывать, при вызове router.push({ path: /mnemo/${id} }) со страницы /mnemo/... create и mounted - не отловились. А как тогда отлавливать, что изменился параметр?
источник