Задать вопрос
  • Как сделать раскрытие подменю js?

    Kentavr16
    @Kentavr16
    long cold winter
    menuLink.addEventListener("click", function (e) {
                    e.stopPropagation(); // замени preventDefault на это
                    menuLink.classList.toggle("_active");
                });

    Код жесть конечно.
    Помогло - отметь решением.
    Ответ написан
  • Как делать такие сложные анимации?

    Kentavr16
    @Kentavr16
    long cold winter
    Два основных варианта - animation-timeline или скрипты. Из минусов анимейшн-таймлайн - относительно слабая поддержка браузерами. Когда я смотрел последний раз было около 65 процентов. Мозила не поддерживает принципиально. Скрипты - это множество библиотек, вот пара примеров. Можно еще руками написать, если знания позволяют.
    Ответ написан
    Комментировать
  • Как связаны между собой сервер node.js и фронтенд react?

    Kentavr16
    @Kentavr16
    long cold winter
    правильно ли я понимаю, что на этапе продакшена мы должны подключаться только к одному порту, на котором находится сервер, а он отправит html, css, js файлы при первом запросе на главную страницу а в дальнейшем будет отправлять JSON?
    В зависимости от настроек сервера и архитектуры твоего проекта. Экспресс может как отдавать хтмл/css,так и служить для обмена данными бека с фронтом(апи). Во втором случае за раздачу хтмл может отвечать какой-либо популярный веб-сервер, nginx/apache.
    при использовании npm run build я получаю папку build, где много css и js файлов. Как эту папку надо связать с node.js

    Никак. На стадии билда участие ноды в проекте заканчивается (в случае с фронтом, естественно. Если у тебя сам сервер, бекенд на ноде, то там нужно запускать это дело на хосте). Ты размещаешь свой код на веб-сервере, который его раздает в дальнейшем клиентам.
    Допустим мы при первом запросе на сервер отправляем HTML файл. Но как клиент получит нужный ему css и js файл из кучи в папке build.
    все как в обычном html. Есть точка входа в виде хтмл-файла, к которой твой билдер уже привязал все стили/скрипты. Все это отдается клиенту.
    Это базовый сценарий. Есть другие способы, такие как SSR например. Но это уже другая история.
    Ответ написан
    Комментировать
  • Локальная дата и время?

    Kentavr16
    @Kentavr16
    long cold winter
    Я состряпал для этого функцию. Можно настроить формат как тебе удобно.

    А метод о котором ты говоришь к твоему примеру уже не применим. Так как после toISOString() в dt лежит не объект Date, а строка, которую ты далее изменяешь методами для строк
    . Есть ряд методов которые приводят к локальному времени, но если тебе нужен именно определенный формат с определенными знаками, то ее результат также нужно "допиливать". Мне проще было для этого выделить функцию.
    Ответ написан
  • Как сохранить результат функции в отдельную переменную?

    Kentavr16
    @Kentavr16
    long cold winter
    ответ здесь. Даже с примером по твоему вопросу.
    Проблема в том что ты пытаешься получить асинхронное значение в синхронном коде. Это не будет работать. Почитай про промисы и колбеки в контексте асинхронности джаваскрипт. Будет куда полезнее за строчку кода в ответе на твой вопрос.
    Ответ написан
    Комментировать
  • Задать первому input checked?

    Kentavr16
    @Kentavr16
    long cold winter
    Написать checked в конце хтмл каждого инпута
    Ответ написан
  • Какая причина неправильного отображения разрешения на втором мониторе?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Сам спросил - сам ответил. Продолжая эксперименты, обнаружил что при плохо работающем дисплее в меню "частота обновления" появляется пункт 60,020 Гц(по умолчанию 60 Гц). При выборе этой опции изображение приходит в норму, а из менюшки выбора частоты обновления экрана опция 60Гц просто исчезает. Вместо нее становится 60,020 Гц. И все работает - ровно до тех пор пока не покрутить изображение. Снова устанавливается 60Гц, снова полосы по бокам. Выглядит как баг то ли видеокарты, то ли операционки, то ли их сочетания.
    Ответ написан
    1 комментарий
  • Как подождать, пока будет подключена База данных?

    Kentavr16
    @Kentavr16
    long cold winter
    можно использовать что-то вроде
    import express from "express";
    
    const app = express();
    const ip = "localhost";
    const port = 4000;
    
    app.get("/", (req, res) => {
      res.send("some response");
    });
    
    function startServer() {
      app.listen(port, ip, () => {
        console.log(`Сервер запущен на адресе ${ip} и порту ${port}`);
      });
    }
    
    async function connectToDatabase() {
      return new Promise((resolve, reject) => {
        setTimeout(() => resolve("ok"), 2000);
      });
    }
    
    connectToDatabase()
      .then(() => {
        startServer();
        console.log("Успешное подключение к базе данных.");
      })
      .catch((err) => {
        console.error("Не удалось подключиться к базе данных:", err);
      });

    где для коннекта к бд использовать промис
    export function connectToDatabase() {
        return new Promise((resolve, reject) => {
            pool.connect((err, client, release) => {
                if (err) {
                    console.error('Ошибка в запросе к БД (1)', err.stack);
                    release();
                    reject(err);
                    return;
                }
    
                client.query('SELECT NOW()', (err, result) => {
                    release();
                    if (err) {
                        console.error('Ошибка в запросе к БД (2)', err.stack);
                        reject(err);
                        return;
                    }
    
                    console.log('\x1b[34m%s\x1b[0m', `PostgreSQL is running (${result.rows[0].now})`);
                    resolve(pool);
                });
            });
        });
    }

    Ну и пул объявить не забыть. Хз, с обычным промисом который в первом примере, работает окей, почему с подключением к бд будет иначе? Для эксперимента ставить pg неохота. Вполне возможно что я что-то проглядел, поправьте, с серверами на ноде давно не имел дела.
    Ответ написан
    Комментировать
  • Как хранить файлы в связке react -express mongo?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Собственно в бд и хранить. На момент написания вопроса не понимал основ БД.
    Ответ написан
    Комментировать
  • Как заставить реакт правильно обновить компоненты?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    вытяжка из комментария -
    Best practice - спрятать токен в httpOnly куке, чтоб js не мог его прочесть и авторизовываться просто через куку в хеадере запроса.
    Можно вот тут почитать, к примеру https://habr.com/ru/company/ruvds/blog/512866/ (обратите внимание на комментарии)
    В любом случае Вам необходимо завести через реакт контекст (к примеру) стор, доступный в любом месте приложения. Оборачиваете всё приложение в контекст провайдер, на первой странице (или при загрузке приложения) запрашиваете какие-либо данные с бэка (данные пользователя например, если авторизация через куку, либо получаете jwt-токен в ответ на ввод логина) сохраняете в переменную в контексте (isAuth например), а в целевом компоненте навигации используете эту переменную как условие выводить одно или другое. Можно вызывать useEffect(() => {какой-то код},[имя переменной]), который будет дергаться только когда "имя переменной" обновится...
    Ответ написан
    Комментировать
  • Как перерендерить компонент при добавлении токена в localStorage?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Отвечу сам себе - используя параметры УРЛ, контекст или редакс.
    Ответ написан
    Комментировать
  • Возможно ли вращать див вокруг уже вращающегося дива при помощи чистого css?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Можно. Ответ с примером в комментариях.
    Ответ написан
    Комментировать
  • Применимы ли в реальном мире фронтенда порождающие паттерны программирования?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Выбирая самое на мой взгляд существенное из комментариев -
    Применимы, но очень ограниченно, и смотря какой фреймворк используется у vue 3 и react кажется с 18 версии более удобно использовать хуки, превращать их в фабрики на мой взгляд бессмысленно лучше упороться в архитектуру разделенную на слои. Последний раз когда писал код подобными паттернами, была обертка над axios


    Ознакомление на начальном этапе своего пути как разработчика нужно для расширения кругозора. Прямой-прямой взаимосвязи между общими описанными паттернами и веб-разработкой(в данном случае фронтом) скорее нет чем есть, если не брать во внимание частности.
    Ответ написан
    Комментировать
  • Как реализовать плавную смену фонового рисунка в firefox?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    На момент написания вопроса ответ - никак. Нужно искать свое костыльное решение.
    Ответ написан
    Комментировать
  • В чем проблема подключения политики безопасности?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Неправильное применение политик. Немного более развернутое объяснение в комментариях к вопросу.
    Ответ написан
    Комментировать
  • Почему в примере дублируются строки инициализации полей класса?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Практического применения/причины такого синтаксиса не нашел. Скорее всего это просто "я так вижу" автора книги.
    Ответ написан
    Комментировать
  • Есть ли более изящные способы типизировать диапазон number?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    В общем, резюмируя переписку в комментариях - сколько-нибудь легко применимого способа такой типизации тайпскрипт на момент создания вопроса не предоставляет. Интересный (и мало того - работающий) вариант такой функциональности можно посмотреть в комментариях, спасибо Alexandroppolus за остроумную реализацию.
    Ответ написан
    Комментировать
  • Почему компонент не видит диспатч в redux/toolkit?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Глупая ошибка - я просто не импортировал функцию которую нужно передавать в диспатч.
    Ответ написан
    Комментировать
  • Как привязать кнопку к панораме в a-frame?

    Kentavr16
    @Kentavr16
    long cold winter
    Если ты хочешь по-простому - добавь кнопку в html и зафиксируй ее при помощи position:absolute в стилях. что-то вроде
    //body html
    <button>Button</button>
    //css
            button{
                position: absolute;
                top: 20px;
                left: 20px;
            }


    Ты пытаешься взаимодействовать с webgl, при этом даже не почитав документацию по библиотеке. Я открыл библиотеку - и там в большом разделе Interactions написано:
    A common misbelief is that we can add a click event listener to an A-Frame entity and expect it to work by directly clicking on the entity with our mouse. In WebGL, we must provide the input and interaction that provides such click events. For example, A-Frame’s cursor component creates a synthetic click event on gaze using a raycaster. Or as another example, Mayo Tobita’s mouse-cursor component creates a synthetic click event when clicking directly on the entity using a raycaster.

    То есть если ты хочешь делать интерфейс "в объеме", прочитай доки. Значительно проще сделать по методу номер один.
    Ответ написан
    Комментировать
  • Как задать пропорциональное уменьшение такому блоку?

    Kentavr16
    @Kentavr16
    long cold winter
    Проблема в правильном описании высоты картинки. Вот пример. обрати внимание на .rooms__card-img . Я еще немного покрутил гап для того чтобы верстка стала на место, но это уже сам доставишь под свои нужды.
    Ответ написан