• Как организуется процесс написания разметки React?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Сразу пишите в jsx

    Да.
    Как подключаете less/sass?

    Как css/sass modules.

    Структура:
    - Страница < компонент
    - Страница < компонент < компонент

    До "Страницы" желательно некий Middleware с управлением состояния и запросами на сервер.
    Ответ написан
    2 комментария
  • Какие проекты сделать на github чтоб показывать работодателям?

    Yeah
    @Yeah
    Варианты:

    1. Плагин к какой-нибудь существующей системе. Например для Wordpress, PHPCI и пр.
    2. Берешь 2 каких-нибудь публичных API и пилишь мини-мэшап, чтобы на основании данных с этих API делалось что-то интересное. Например: берем API VK и last.fm и делаем свой мини-плеер с рекомендациями из last.fm и музыкой из VK. API можно глянуть тут:

    www.quora.com/What-are-some-cool-fun-APIs
    https://www.reddit.com/r/webdev/comments/27nqyk/wh...
    www.computersciencezone.org/50-most-useful-apis-fo...
    www.webdesignerdepot.com/2011/07/40-useful-apis-fo...
    blog.mashape.com/list-of-fun-and-interesting-apis-...
    webresourcesdepot.com/15-free-apis-you-didnt-hear-...
    https://gearside.com/public-json-feeds/

    3. Подвид предыдущего. Объединяем API Flickr и какого-нибудь авиаагрегатора (например, aviasales или kayak). Пользователю показывается лента с красивыми фоточками и тут же цена на билет и копка заказа
    Ответ написан
    Комментировать
  • Нормально ли это, что в режиме Strict-mode в React-приложении делается 2 запроса?

    black1277
    @black1277
    Вольный стрелок
    Реакт придерживается концепции "чистых" функций. Т.е. таких функций, которые всегда дают одинаковый, предсказуемый результат при одинаковых входных параметрах. В режиме разработки, с включенным strict-mode реакт помогает выявить непредвиденные эффекты и состояния, возникающие в результате нарушения концепции, вызывая дважды все функции, которые он считает "чистыми". Как это работает?
    Предположим, вы написали функцию, которая по сигналу "свет" - включает свет. Но если свет уже включен - функция его выключает. Вы довольны и счастливы - послали сигнал "свет" - свет включился, послали еще один сигнал "свет" - выключился. Но в режиме strict-mode - вы обнаружите, что свет не включается, потому что реакт шлет второй сигнал "свет", который выключает после первого сигнала! И опять, возникает вопрос - да зачем это нужно? А затем, что вы не можете предсказать результат действия сигнала "свет", не зная текущего состояния! Возникнет острая необходимость - включить свет, а вы не знаете - включен он сейчас или нет... Пошлете сигнал "свет", когда он включен - получите выключение.
    Примерно такие варианты поведения выявляет strict-mode.
    Ответ написан
    Комментировать
  • Почему useRef работает неверно?

    @slide13
    frontend/web-developer
    Проблема не в useRef, проблема в том как работает console.log. Если в console.log передается объект, то он выводится по ссылке, в итоге получается, что когда обновляется ref, то браузер автоматом обновляет его в консоли.
    Чтобы проверить, что useRef работает как надо - достаточно вывести current значение из ref, т.е. console.log(t.current, 0)
    Если же нужно вывести именно объект на момент его логирования, то можно привести объект к строке и снова собрать в объект:
    console.log(JSON.parse(JSON.stringify(t, 0)))

    На MDN можно почитать про это
    Ответ написан
    2 комментария
  • Как webpack собирает импорты и экспорты?

    bingo347
    @bingo347
    Crazy on performance...
    Есть 2 основных подхода для решения проблемы изоляции имен в модулях:
    - подход webpack до 4 версии включительно - завернуть каждый исходный модуль в свою функцию и переложить эту задачу на средства языка js;
    - подход rollup и последователей типа vite - произвести переименование сущностей так, чтоб разные сущности из разных модулей названные одинаково назывались по разному, а одни и те же сущности названные по разному в разных модулей назывались одинаково.

    У каждого из подходов есть свои плюсы и минусы.
    В подходе webpack с одной стороны получается очень надежная изоляция, так как работают средства самого языка, но с другой на выходе получается больше кода, так как добавляются обертки + некий рантайм для взаимодействия виртуальных модулей. Так же такой код хуже оптимизируется на постобработке, так как тулзы вроде terser банально не могут восстановить связи между разными модулями. Хотя тот же рантайм позволяет гибко разбивать код на чанки и эмулировать динамические импорты.
    В подходе rollup возможны ошибки на промежуточной обработке (сам rollup предусматривает большинство из них, а вот плагины могут накосячить, особенно на больших проектах), зато нет дополнительного кода и тулзы вроде terser могут обрабатывать весь бандл целиком со всеми межмодульными связями, а значит делать более эффективные оптимизации.

    В webpack 5 был использован гибридный подход. Модули все так же изолируются средствами языка и соединяются посредством рантайма. Но часть модулей могут быть соединены в один по принципу rollup, что улучшает общий размер бандла и оптимизацию на постобработке.

    P.S. сделайте небольшой проект из примерно 10 модулей, соберите его webpack/rollup в dev режиме и посмотрите что получается на выходе, очень многое станет понятно, если просто почитать код получившегося бандла.
    Ответ написан
    1 комментарий
  • Как webpack собирает импорты и экспорты?

    FairyTaleComposer
    @FairyTaleComposer
    Вебпак изолирует каждый модуль, оборачивая его код в анонимную функцию. Таким образом у каждого модуля образуется своя область видимости. Отсюда то, что не экспортируется, не видно за пределами этого модуля. Любые глобальные переменные, функции, классы перестанут быть глобальными.
    Статей конкретно по этому вопросу пока не вижу, может позже найду, либо кто-то другой подскажет.
    Ответ написан
    Комментировать
  • Чем отличается Object.setPrototypeOf от Object.create?

    @Platn
    Object.setPrototypeOf(foo, bar)`
    - проставляет ссылку на bar в foo.__proto__

    const bar = Object.create(foo)
    - создает новый объект bar и bar.__proto__ будет указывать на foo.

    Разница в том, что 1 всего лишь проставляет ссылки, памяти под новый объект не выделяется
    А второй метод создает новый объект.
    Ответ написан
    Комментировать
  • Как пользователь страницы получает шрифты при локальном подключении?

    @xGreen_Max
    Обычно на ПК(Windows 10)
    шрифты хранятся по этому пути:
    C:\Windows\Fonts\какой-то там шрифт

    Если у пользователя по этому пути будет обнаружен шрифт,
    который у вас на сайте, то браузер автоматически подключит данный шрифт.
    Такой метод используется, чтобы ускорить загрузку страниц и уменьшить запросы к серваку.

    А если у пользователя не будет шрифта на компе,
    то браузер скачает данный шрифт у вас с сайта,
    если конечно вы правильно указали путь по которому можно скачать шрифт.
    Ответ написан
    Комментировать