Задать вопрос
  • Как решить проблему с сохранением выбранного языка при смене языка на мобильных устройствах?

    Aetae
    @Aetae Куратор тега JavaScript
    Andy Koshman, но если юзеру надо выбирать из списка, то как это бэк то учёт? По нормальному клиент ставит куку - бэк её читает и сразу редиректит на нужный адрес.

    Если бэк будет сам себе что-то ставить, то вижу только два с половиной варианта, два не работающих и половинка - так себе:
    1) если бэк ставит куку только если её ещё нет, иначе перенаправляет - тогда пользователь никак не сможет сменить язык;
    2) если бэк всегда ставит куку при открытии страницы определённого языка, запоминая выбор, то смысла в этом нет: откроют другую страницу перезапишут значение;
    2а) если у сайта есть версия "без языка", то возможно вот тут будет перенаправление на запомненную версию.
  • Как сверстать блок с текстовыми данными?

    Aetae
    @Aetae
    Сергей delphinpro, боязнь использовать таблицы для таблиц - это нездоровое когнитивное искажение. Причины, конечно, известны, но нельзя давать своим травмам собой управлять. :)
  • Как это сверстать с учётом мобильной версии?

    Aetae
    @Aetae
    sharpsss,
    получается em подстроиться под мой line-height?

    Нет.
    line-height у меня может динамически меняться

    Ну так и расчёты меняйте, всё равно же уже скрипт придётся использовать для этого изменения.
    Чтоб оно на лету в css считалось и менялось без задержек, можете скриптом только переменную менять, типа .style.setProperty('--line-height', lineHeight), а всё остальное уже в css через var(--line-height) и calc.
  • Загадочное скликивание РСЯ с кучей противоречий, как победить?

    Aetae
    @Aetae
    Посмотри isTrusted у события клика. Если false, то мб какие-то расширения у юзеров или скрипты, если true - то хз, может и боты.
  • Как сохранить хранилище?

    Aetae
    @Aetae Куратор тега JavaScript
    Ну добавь в конце обработчика click
    localStorage.setItem('storage-type', btnSwap.dataset.storage)
    , в чём проблема то?
  • Как накинуть условие на длину массива в типе?

    Aetae
    @Aetae Куратор тега JavaScript
    Это конечно сработает, но vegetableeeeeeee я бы те не советовал так делать, потом задолбаешься перекастовывать типы из обычного массива, который возвращает 99% функций по работе с массивами. :)
  • Как сделать так, чтобы установленная галочка "подключаться автоматически" автоматически подключала Windows 10 к Wi-fi сети?

    Aetae
    @Aetae
    1. А какого-то другого подключения у тебя случаем нет, когда ты подносишь свою точку? У винды там приоритеты всякие.
    2. Винда не обновляет постоянно список доступных сетей, потому что это приводит к проседанию пингов в сети, а то и потерям(почему приводит - отдельный вопрос). Можно смотреть в этом направлении.
  • Как передать данные из сервера axios на express?

    Aetae
    @Aetae
    Klayeryt, так, как я написал в своём ответе. Просто добавь use строчки после app.use(cors()).
    Из-за гениального архитектурного решения express по умлчанию не умеет читать POST body вообще никак, из-за чего без подключённых парсеров req.body всегда будет тупо undefined.
  • Как передать данные из сервера axios на express?

    Aetae
    @Aetae
    Klayeryt, глянул внимательнее, парсеры для body у тебя создаются но нигде не используются, добавь:
    app.use(jsonParser);
    app.use(urlencodedParser);

    По идее тебе ide должна сереньким такое подсвечивать.
  • Как передать данные из сервера axios на express?

    Aetae
    @Aetae
    Klayeryt, да ёклмн, нет никаких res.send в axios.
  • Для чего добавляется окончание View в название компонента?

    Aetae
    @Aetae Куратор тега Vue.js
    tostershmoster, vue придерживается полной совместимости с html. а потому регистр не имеет значения. (Да, ты можешь в html писать так: <InPUt />, нет, не стоит этого делать:))

    Разве что PascalCase имена vue преобразует в kebab-case для красоты и удобства, но сути это не меняет.

    Стандартной практикой в именовании считается введение префикса для всех компонентов в рамках приложения, организации или дизайн системы. Допустим для хабра компоненты будут: h-header, h-logo и т.п. Или hb-header...

    Ну и если компонент точно будет только в одном экземпляре в одном месте то можно его называть по родителю, типа есть main-layour, рядом с ним main-layout-header.

    В общем тут всё как хочешь, на свой вкус.:)
  • Правильное описание типов для колонок таблицы (Typescript)?

    Aetae
    @Aetae Куратор тега TypeScript
    WbICHA, для функция то вообще просто перегрузками обойтись можно.)
  • Почему не работает локальная библеотека на сборке Vite?

    Aetae
    @Aetae Куратор тега TypeScript
    А ты всё ещё пишешь import Editor from 'custom-editor-lib/dist/index' или всё таки уже: import Editor from 'custom-editor-lib'?
  • Правильное описание типов для колонок таблицы (Typescript)?

    Aetae
    @Aetae Куратор тега TypeScript
    WbICHA, самая стандартная хрень которая возникала на разных проектах 100500 раз: универсализация input компонента, где дискриминатор type=date|datetime|upload|range...<ещё десяток-другой вариантов>, половина полей стандартные, половина уникальные. И если дискриминатор указан, то какбэ всё ок, но ведь хочется для type=text его опустить. Всегда хочется, прям душа требует. А незя, без применения подобной твоей кракозябры, которая всё залагает.:)
  • Правильное описание типов для колонок таблицы (Typescript)?

    Aetae
    @Aetae Куратор тега TypeScript
    WbICHA, это будет лагать как тварь на сложных больших юнионах, но если очень хочется - тоже вариант.)
  • Почему не обновляется элемент на странице?

    Aetae
    @Aetae Куратор тега Vue.js
    tostershmoster, ну в этом суть реактивности: поменял - оно изменилось.:) Объект то ты меняешь один и тот же, объекты в js передаются по ссылке.

    Ты можешь попробовать использовать shallowReactive вместо reactive, но тут я ничего не гарантирую, либо таки не изменять исходные объекты, а делать их копии перед работой с ними: cloneDeep из lodash или руками.
  • Почему не обновляется элемент на странице?

    Aetae
    @Aetae Куратор тега Vue.js
    tostershmoster, ну вот, всё и стало понятно, даже забавно:
    pagesStore[index] = page;

    Если ты используешь vue 2, то массив pagesStore неявно становится реактивным при присвоении к data, однако в vue 2 из-за ограничений механизма гетттров не работает реактивность для присвоения по индексу массива. Чтобы заработало - надо явно использовать Vue.set(pagesStore, index, page) или использовать .splice.

    Если ты используешь vue 3, то там реактивность работает при присвоению по индексу, т.к. используется Proxy, однако pagesStore - не реактивен, т.к. присвоение массива в data никак не меняет исходный массив.

    т.е. перенести код который работает со стором из js файла во vue?

    Нет, как сделать массив реактивным я написал выше, после строки "Исходя из этого:".

    P.S. Либо свой стор ты придумал сам в таком виде, либо выкини нафиг эту обучалку.
  • Почему не обновляется элемент на странице?

    Aetae
    @Aetae Куратор тега Vue.js
    Изначально pagesStore у тебя не реактивный, его изменения никак не регистрируются vue.

    Дальше развилка:
    vue 2: this.pages = this.$pages.getAllPages() - присвоение неявно превращает массив pagesStore в реактивный, дальнейшие изменения в нём уже будут отслеживаться.
    vue 3: оригинальный pagesStore всё ещё остаётся не реактивным, любые изменения в нём никак не отражаются на vue.

    Исходя из этого:
    vue 2: требуется знать как именно ты изменяешь этот массив, потому что потенциально оно всё ещё может работать.
    Однако не помешает сделать хранилище реактивным по умолчанию:
    const pagesStore = Vue.observable(JSON.parse(pagesJson));

    vue 3: работать оно не может в принципе, тебе следует сделать твоё хранилище реактивным:
    const pagesStore = reactive(JSON.parse(pagesJson));


    В целом не следует брать объекты неведомо откуда и ждать что vue бет автоматически реагировать на их изменения, если ты не завернул их в reactive\ref\положил в data. В отличие от других фреймворков, где проверки изменений производятся руками, vue следит за изменением только реактивных объектов. Минус - не произойдёт никаких перереисовок если объект не реактивный, плюс - перерисовка произойдёт тогда и только тогда, когда реактивное поле изменилось, а не 100500 лишних раз.
  • Нужно поддержка на JavaScript?

    Aetae
    @Aetae Куратор тега JavaScript
    Для декодирования используется decodeURIComponent.
    Только вот где ты видишь это? Если в адресе(ссылке) - то это нормально, это стандарт передачи и сервер сам разберётся и раскодирует.