• Что за ошибка вычисляемого свойства Unexpected side effect in computed property?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Изменять данные в вычисляемых свойствах не следует, но вы это делаете - поскольку метод reverse не создаёт новый массив, а меняет исходный. Так что прежде чем его использовать, массив следует скопировать:

    return [...this.messagesforuser].reverse()
    Ответ написан
    Комментировать
  • Как использовать async/await в actions vuex?

    @RokeAlvo Автор вопроса
    в общем разобрался, если кому будет полезно:
    await fetch() возвращает объект Response
    соответственно требуется выполнить await response.json() или другие методы, в зависимости от типа получаемых данных. Обращаю внимание на await: response.json() возвращает Promise, соответственно нужен await
    Итого:
    actions: {
             async initialCityList({ commit }) {
                const siteContacts = await fetch('/api/contacts')
                commit('setSiteContacts',  await siteContacts.json())
            }
        },


    При использовании Axios:
    axios.get() возвращает объект, который содержит тело ответа в поле data, соответственно итоговый код:
    actions: {
             async initialCityList({ commit }) {
                const siteContacts = await axios.get('/api/contacts')
                commit('setSiteContacts', siteContacts.data)
            }
        },
    Ответ написан
    1 комментарий
  • Как удалить объект из массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const index = arr.findIndex(n => n.id === id);
    if (index !== -1) {
      arr.splice(index, 1);
    }

    или, если нужен новый массив:

    const newArr = arr.filter(n => n.id !== id);

    Если же id имеют не уникальные значения, то создание нового массива остаётся без изменений, а модификация существующего может выглядеть так:

    for (let i = arr.length; i--;) {
      if (arr[i].id === id) {
        arr.splice(i, 1);
      }
    }

    или так (да, reduceRight используется не совсем по назначения, как и оператор &&):

    arr.reduceRight((_, n, i, a) => n.id === id && a.splice(i, 1), null);

    или так:

    let countDeleted = 0;
    
    for (let i = 0; i < arr.length; i++) {
      arr[i - countDeleted] = arr[i];
      countDeleted += arr[i].id === id;
    }
    
    arr.length -= countDeleted;

    или так:

    arr.splice(0, arr.length, ...arr.filter(n => n.id !== id));
    Ответ написан
    Комментировать
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    @Nkly777
    git chery-pick - ты забираешь комиты из одной ветки в другую, это бывает полезно когда изменения сделаные другим разработчиком в его ветке, прямо сейчас нужны тебе в твоей ветке, и что бы не писать этот код заново, ты забираешь его комит себе в ветку

    git rebase master - ты синхронизируешься с главной веткой в которую коммитят все разработчики проекта, это полезно когда кто-то изменил участок кода с которым ты сейчас работаешь в своей ветке, дабы через неделю ты смог без проблем смержиться с master веткой. Обычно делается каждое утро перед началом рабочего дня и в конце когда фича готова.

    git merge - обычно используется когда у вас 2 и более master ветки (к примеру master и prototype) в этих ветках очень много комитов (и rebase здесь не подходит) и обчно через пару недель, maintainer репозитория наработки из prototype ветки "сливает" в master ветку по средствам этого самого git merge

    P.S. Что бы легче предствить разницу между git merge и git rebase. Представь что merge как собачка на молнии у одежды - "сшивает" комиты по дате их создания.
    В то время как git rebase как пожарная лестница - при применении твои коммиты крепится на конец родительской ветки

    git merge используйте для мержа фич и фиксов в master ветку (как и делает это Github)
    а git rebase используется для своей ветку в которой вы работаете над фичей что бы забрать последние изменения с master ветку (для этого есть очень удобная команда `git pull --rebase origin master`, аналог 3х команд (`git checkout master; git pull origin master; git checkout mybrach; git rebase master`)
    Ответ написан
    2 комментария
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
    2 комментария
  • Почему выходит ошибка во Vuex с v-model?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Как я понял, v-model в компоненте ProductRow обновляет почему-то не локальную копию item, а state у стора

    А с чего вы взяли, что у вас тут где-то есть какая-то "локальная копия"? Нет, серьёзно - попробуйте показать то место у себя в коде, где, как вам кажется, вы создаёте копии значений из стора.

    Предположу, что...
    ...под копированием вы подразумеваете

    data() {
        return {
            'item': this.initialItem
        }
    }

    Нет, это не копирование объекта - так вы лишь создали ещё одну ссылку на объект. Для создания копии данных делайте так: Object.assign({}, this.initialItem). Или так: { ...this.initialItem }.
    Ответ написан
    3 комментария
  • Как решить эту проблему?

    origami1024
    @origami1024
    went out for a night walk
    Три варианта:
    1. Посылать ивент в батю, батя пошлет деду, так до общего предка, общий предок спустит пропс своим наследникам.
    2. Использовать Vuex, изменять там состояние, чтобы другой элемент просто обновлялся при изменении затрагивающих его состояний
    3. Общаться напрямую через рут
    Компонент1:
    this.$root.$emit('eventing', data);
    Компонент2:
    mounted() {
      this.$root.$on('eventing', data => {
        console.log(data);
      });
    }
    Ответ написан
    Комментировать
  • Nuxt asyncdata почему я вижу запросы xhr на фронте?

    yarkov
    @yarkov Куратор тега Vue.js
    Помог ответ? Отметь решением.
    Разве этот запрос не должен быть на стороне сервера?

    Почему вы документацией брезгуете?
    Ответ написан
    Комментировать
  • Nuxt asyncdata почему я вижу запросы xhr на фронте?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Нет. SSR работает ровно один раз - при первом открытии. При дальнейших переходах у тебя работает обычное SPA с xhr запросами за данными. asyncData как и много другое в nuxt - это просто абстракции, призванные скрыть разницу меж SSR и обычной работой SPA.
    Ответ написан
    2 комментария
  • В чем преимущество использования в NUXT asyncData на страницах, вместо обработки в хуках (по типу async beforeMount)?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Пока asyncData не отработает - компонент не отрендерится и не замнотируется.
    При стандартном подходе компонент сначал рендерит заглушку, потом грузит данные, потом рендерит что-то на основе данных, при asyncData он ничего не делает пока нет данных. Это удобнее.
    Увы asyncData не идеальна, из-за архитектуры vue-router(я в своё время глубоко разбирался, увы без полного переписывания vue-router особо лучше не сделаешь), но всё равно удобней чем делать то же самое руками.
    Ответ написан
    2 комментария
  • Nuxt: Что не так с asyncData и req?

    sinneren
    @sinneren Автор вопроса
    Понятно... данные получать надо проверив process.server в asyncData. Ссылку на страницу надо сменить на нативную вместо nlink
    Ответ написан
    Комментировать
  • Как узнать максимально возможную прокрутку страницы?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    document.documentElement.scrollHeight - document.documentElement.clientHeight
    Ответ написан
    Комментировать
  • Как вернуть элементу начальные свойства?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    const div = document.querySelector('....');
    
    div.style.display = 'none'; // скрываем
    div.style.display = ''; // возвращаем обратно, чтобы там ни стояло


    Ответ написан
    3 комментария
  • Ошибка при запуске команды npm run dev?

    @iAlex195
    Вы видимо запускаете команду npm run dev не в той директории.
    Перейдите в директорию проекта, где расположен файл package.json и попробуйте запустить команду.
    Ответ написан
    Комментировать