• Как проксировать файл через express/node?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Как-то так
    response.pipe(res);
    file не нужен
    Ответ написан
    Комментировать
  • Когда использовать useCallback, useMemo и useEffect?

    @LEXA_JA
    useEffect - это хук, который позволяет использовать сайд эффект. В классах его аналогом было использование componentDidMount, componentDidUpdate и componentWillUnmount. В нем можно делать подписки, отправлять запросы управлять анимацией и т. д.
    const [data, setData] = useState(null);
    
    useEffect(() => {
      const controller = new AbortController()
      fetchData(controller.signal).then(setData)
    
      return () => controller.abort()
    }, [fetchData, setData])


    useCallback и useMemo предназначены для оптимизации. useCallback получает на функцию и массив аргументов, и возвращает одну и туже функцию, до тех пор, пока аргументы не изменились. useMemo отличается тем, что он возвращает не саму функцию, а результат её выполнения. По большому счету они являются взаимозаменямыми.
    Таким образом, useMemo используется для сохранения результатов тяжёлых вычислений, например обработка массива.
    const data = useMemo(() => array.map(mapper).filter(predicate).reduce(reducer), [array])

    А useCallback используется, когда важна постоянность ссылок на функцию. Например, когда мы передаём ссылку в компонент, который использует React.PureComponent или React.memo, или, когда функция используется в качестве аргумента в других хуках
    const handler = useCallback(() => {
      // что-то сделать 
    }, [])
    
    useEffect(() => {
      handler(value)
      // если не использовать useCallback, эффект будет срабатывать постоянно 
    }, [handler, value])
    Ответ написан
    1 комментарий
  • Background-size cover для retina экранов?

    SmthTo
    @SmthTo Куратор тега Вёрстка
    Все перепёлки мира будут оплакивать мою смерть.
    @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
      
      /* Тут ваш код для чистой retina, начинающейся от минимального размера viewport в два раза меньше физического или, если нет поддержки первого свойства, от от разрешения в 192DPI */
      
    }

    Вот пример, где работает cover везде и безо всяких проблем. Проверяется это тем, что там две картинки на фон, первая с надписью X1 (обычная), вторая — с надписью X2 (retina). Везде background-size: cover. И всё работает:



    На обычном экране грузит X1:

    5d517b143bb0a556931245.png

    На экране, который проходит проверку retina — X2

    5d517bafeed0c135455260.jpeg

    Android Chrome тоже всё понимает и, если экран высокого разрешения, использует retina-вариант (X2):

    5d517f4f33c14418788499.png
    Ответ написан
    Комментировать
  • Rxjs - как сделать двойной subscribe?

    search
    @search
    мама говорит что я особенный
    Обзёрвер не выполняет никакой работы до тех пор пока не была вызвана функция subscribe. Сам процесс вызова subscribe называется "подписка". Как только функция subscribe была вызвана (т.е. на обзёрвер подписались) - дело пошло и обзёрвер начал свою работу. До тех пор пока subscribe не вызван, обзёрвер - это просто рецепт того что нужно делать когда прийдут данные.

    Сама функция subscribe возвращает деструктор. Деструктор - это что-то что нужно выполнить, если вдруг понадобилось остановить обсёрвер (например прервать HttpConnection).

    Код ниже возвращает функцию-деструктор

    let get = () => {
        return this.http.get(url)
            .subscribe((response: ResponseObject) => {...});
    }


    На функцию-деструктор невозможно подписаться. Коллбеков у неё тоже нет. Её можно только выполнить для того чтоб остановить обзёрвер.

    Поэтому, универсальный рецепт - это никогда не подписываться в самих сервисах. Если вам нужно что-то проделать с данными из обзёрвера в самом сервисе, то можно воcпользоваться оператором tap:

    let get = () => {
        return this.http.get(url)
            .pipe(
              tap((response: ResponseObject) => {...})
            );
    }
    
    // а дальше где-то в коде сделать
    
    service.get().subscribe((response: ResponseObject) => {...})


    Более того, вы можете делать tap (и любой друго pipe оператор) пока у вас есть обзёрвбл:

    service.get()
      .pipe(
        tap(...),
        map(...),
        whatever(...),
      ).subscribe((response: ResponseObject) => {...})


    Вам будет проще понять механизм работы обзёрвблов, если вы будите рассматривать обзёрвбл как функцию, а метод subscribe как способ выполнить эту функцию.

    Учитывая вышесказанное:

    const observable = service.get();
    observable.subscribe((result) => {...}); //выполнит запрос к серверу
    observable.subscribe((result) => {...}); //выполнит запрос к серверу еще раз
    // запрос к серверу будет инициироваться каждый раз когда будет выполняться функция subscribe
    Ответ написан
    2 комментария
  • Как имитировать нажатие средней кнопки мыши с помощью js?

    if (window.CustomEvent) {
        const myElement = document.querySelector(".button")
        const middleClick = new MouseEvent("click", { "button": 1, "which": 1 });
        myElement.dispatchEvent(middleClick);
    }
    Ответ написан
    5 комментариев
  • Почему стили отображаются в одном браузере, а в другом нет?

    не правильно подкчлюили стили, гдето допустили ошибку
    Ответ написан
    Комментировать
  • Как сделать вот такую кнопочку CSS?

    AlexMaxTM
    @AlexMaxTM
    Лучше конечно картинкой, благо она будет небольшой. Можно сделать через SVG, возни много, но зато потом точно будет понятно, что быстрее это сделать через картинку.
    Ответ написан
    Комментировать
  • Как сделать вот такую кнопочку CSS?

    Mirkom63
    @Mirkom63
    Я программист
    Не надо картинкой. Картинки - ущерб))))))))
    Да, лучше svg-шкой бахнуть.
    Через css маской можно через clip-path (но это опять же в svg маску рисовать).
    Можно через border-radius поиграться. Но не факт, что точно такой же результат будет.
    Ответ написан
    Комментировать
  • Какие есть варианты анимации добавления элемента?

    @spike__x
    Если на css animate.css
    Ответ написан
    Комментировать
  • Как работать с callback и необязательными параметрами в JS?

    boratsagdiev
    @boratsagdiev
    Я сейчас обычно использую подобную запись:

    function doSomething({ one, two = "two", callback = null, ...args } = {}) {
      // some function shite
    
      if (args.anotherParam) {
        callback(two);
      } else {
        callback(one);
      }
    }
    
    doSomething({
      one: "notSoOne",
      callback: console.log,
      anotherParam: "mmmmmmhhhmm"
    });
    Ответ написан
    Комментировать
  • Какие вещи должен уметь делать junior frontend developer?

    @nemoisfree
    1. верстальщик - html, css, jquery на примитивном уровне, чтобы можно было подключать библиотеки и писать свои небольшие скрипты, умение пользоваться bootstrap, понимание модульных сеток
    2. junior frontend - первый пункт + нативный js + основы реакта \ vue \ angular, базовые знания git
    3. middle frontend - когда ты уже уверенно себя чувствуешь, решаешь любые задачи
    4. senior frontend - опытный разработчик с хорошим знанием английского языка, глубоким пониманием нативного js и выбранного фреймворка. Благодаря коммуникативным навыкам ведет за собой команду.
    Ответ написан
    Комментировать
  • Какие вещи должен уметь делать junior frontend developer?

    @Sashjkeee
    f-e
    Уважаемый Павел Волынцев дал тут развернутый ответ
    Ответ написан
    Комментировать
  • Какие вещи должен уметь делать junior frontend developer?

    1) Когда смотришь на макет, то не должно быть вопросов "как это сверстать", а только несколько вариантов на самый сложный элемент.
    2) Скорость. Если будет выбор - то выберут кто быстрее.
    3) Умение тестировать. Надо уметь ловить баги во всех браузерах и устройствах самому. А не "на проверяй" руководителю, когда исправил код, а как отображается не посмотрел даже.

    Эти 3 пункта считаю важнее, чем стек технологий, которыми владеешь.
    Ответ написан
    7 комментариев
  • Как сделать чтобы js работал в элементе, полученным ajax'ом?

    Stalker_RED
    @Stalker_RED
    Получается, что элементы, загруженные аджаксом, не воспринимают так просто обработчики, но почему?
    Потому что в тот момент, когда вы пытаетесь навешиваете обработчик на кнопку (сразу после загрузки страницы) этой кнопки еще нет.

    Как сделать чтобы они понимали их?

    Делегирование событий, как и подсказал Максим Маркитантов
    $(document).on( // обработчик вешается на сам документ (лучше на родительский элемент)
    'click', // слушает все клики
    '.button',  // ищет среди них те, что были по элементам с классом .button
    function() {
        console.log('click');
      });


    Другой вариант: навесить обработчик уже после того как ajax'ом добавили новые кнопки.
    Ответ написан
    Комментировать
  • Как сделать чтобы js работал в элементе, полученным ajax'ом?

    markitantovm
    @markitantovm
    Художник, музыкант, литературовед
    $(document).on('click', '.button', function() {
        console.log('click');
      });
    Ответ написан
    1 комментарий
  • Как сделать, чтобы div занимал максимально доступное место?

    AlexKeller
    @AlexKeller
    https://jsfiddle.net/7n2kxfwj/
    Если сделать текст в правой колонке короче, то она займет min-width. А с длинным текстом будет max-width

    Если нужно, чтобы и при коротком тексте правая занимала max - можно добавить ей flex: 1 1 auto;
    Ответ написан
    2 комментария
  • В каком порядке изучать технологии начинающему html-верстальщику?

    @backender_ru
    https://backender.ru/
    Оххх. У меня сейчас жена учит HTML. Я ее обучаю, поэтому расскажу как это происходит. Распишу по этапам.

    1) собственно сам HTML. На заучивание тегов ушло пару дней. На первом этапе она учила теги с коротким описанием, что этот тег делает.

    2) на втором этапе я рассказывал, как правильно располагать блоки на странице и как правильно делать HTML сетку без CSS, на этом этапе у верстальщика должна в голове строиться будущая структура HTML страницы, смотря на макет. Мучать теги до тех пор, пока не придет понимание контейнеров, колонок, хедеров футеров и так далее.

    3) Когда пришло понимание того, как располагать блоки, начинаем изучать CSS. Здесь изучение идет по нарастающей, сначала float, потом flexbox, потом пишем маленькую сетку, как аналог бутстрапа, а потом уже идут CSS фреймворки.

    Начинать сразу с flexbox + bootstrap 4 к примеру, это выстрел себе в ногу, потому что на фрилансе и в студиях много сайтов с float. И очень важно понимать именно это.

    Также у нас были проблемы с тем, чтобы не привязывать класс к конкретному элементу, а писать так называемый универсальный CSS, ну то есть чтобы не было классов button1-margin-top-10 и так далее.

    CSS мы сейчас изучаем в два этапа: CSS который отвечает за позиционирование (float -> flexbox) и за визуализацию (background, color) этот лайфхак помогает избежать путаницы.

    И еще я понял, что девушки любят не только ушами, но и глазами. Когда показываю CSS, стараюсь делать блоки как можно крупнее и ярче, чтобы было понимание:)

    -------
    И заметьте, все без CSS фреймворков. Пока вы не сможете сделать что-то на чистом CSS, CSS-фреймворки вам противопоказаны.
    Ответ написан
    1 комментарий