Задать вопрос
  • Где хранить свои функции в проекте на React?

    boompro
    @boompro
    Frontend dev
    Если используешь эти функции только в компонентах, сделай отдельно папку lib или helpers например в корне каталога компонент или например в /src подобно как эти /src/lib or /src/helpers и от туда подключай в тех компонентах где нравится и не только компонентах, если это надо в другом месте.

    Как правило надо опрелить смысловую нагрузку твоих функций и возможно отсюда отталкиваться.
    Ответ написан
    Комментировать
  • Плохая ли практика использовать styled-components и css модули в одном проекте в React?

    Ужасного ничего не произойдет, однако вся сущность styled-components намекает на то, что лучше реализовать с помощью прокидования пропсов
    Ответ написан
    Комментировать
  • Как лучше делать сетку в React проекте?

    Смотря какой подход для стилей вы используете в своем проекте.
    Если стили пишете на styled-components то да лучше использовать его, а если отдельно подключили - sass, less или простой css то подойдет вариант с css классами.
    Или если к примеру в проекте подключен Bootstrap, то почему же не использовать его.
    А вообще если проект маленький то лучше использовать старый добрый FlexBox.
    Ответ написан
    3 комментария
  • Как изменять стейт 1 раз при прокрутке в конец страницы?

    mrhard
    @mrhard
    web разработчик
    Введите переменную для определения статуса загрузки

    var is_loading_page = false;
    
    // в обработчике скролинга
    if (is_loading_page) return false;
    is_loading_page = true;
    
    // в калбеке получения новой страницы (через AJAX например)
    is_loading_page = false;
    Ответ написан
    2 комментария
  • Как изменять стейт 1 раз при прокрутке в конец страницы?

    @MamaLuyba
    скорее всего так происходит потому, что event реагирует на прокрутку колесика и, соответственно, т.к. несколько прокруток будут иметь одинаковые значения высоты окна - функция и отработает несколько раз. но это не точно.
    можно попробовать удалять eventListener после первого срабатывания, а при скролле в начало страницы - вновь добавлять.
    Ответ написан
    1 комментарий
  • Можно ли делать сетку в корневом (предкорневом) компоненте App.js в React'е?

    @camelCaseVlad
    В App.css оставляйте только глобальные стили*.

    div1 и div2 являются отдельными, изолированными компонентами, так что их классы будут импортированы в соответствующих файлах.

    *данный подход не будет являться плохой практикой, напротив, это верный подход. Стоит только посмотреть на файл App.css в create-react-app, где вы найдете глобальные стили для приложения.

    5e3d813c04d0a147872429.png
    Ответ написан
    3 комментария
  • Как работает хук useEffect?

    @abberati
    frontend-разработчик
    Конкретно в этом примере нет разницы, где объявлять. Если бы у эффекта были зависимости (а они тут должны быть, просто пример не про это написан), то эффект выполнялся бы реже, чем на каждый рендер. Тогда функция снаружи объявлялась бы впустую.

    А вызывает её не эффект, а ChatAPI — представьте себе, что это некий document.addEventListener м обработчиком событий handleStatusChange. Эффект организует подписку и отписку.
    Ответ написан
    2 комментария
  • Как работает хук useEffect?

    profesor08
    @profesor08
    Переданная в useEffect функция вызывается при обновлении компонента, либо указанных зависимостей. Назначения параметров указаны в документации.
    Ответ написан
    Комментировать
  • Возможно ли с помощью hooks создать полноценную замену классовым компонентам?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    useEffect(() => {
      // component did mount code here
      return () => {
        // component will unmount code here
      };
    }, []);

    Почитать.
    Ответ написан
  • Как написать regex для поискового запроса?

    @Karpion
    Мне кажется, сделать требования к owner одним регексом - малореально. Можно ли при поиске накладывать несколько регексов, требуя, чтобы строка удовлетворяла им всем?

    Для repository примерно так (считая, что минимальная_длина = 1):
    ^[a-z0-9-]{1,39}$

    Если бы owner был таким же - то общий регекс примерно такой:
    ^[a-z0-9-]{1,39}/[a-z0-9-]{1,39}$
    Ответ написан
  • Как написать regex для поискового запроса?

    IgorPI
    @IgorPI
    Ответ написан
    Комментировать
  • Как написать regex для поискового запроса?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    /^([a-z0-9]|[a-z0-9](-(?!-)|[a-z0-9]){0,37}[a-z0-9])\/[a-z0-9-]{1,39}$/i

    https://regex101.com/r/8bFxRH/2
    Ответ написан
    Комментировать
  • Как сделать насквозь прозрачный блок в див?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Лёгкого пути тут нет, к сожалению. Inset-закругления нет в CSS на данный момент. Только через градиент (адаптивно и всё такое) или картинкой на фон (не очень адаптивно, или через border-image (адаптивно, но с помощью картинки), или кучей блоков (адаптивно).

    В данном случае идеально подойдёт градиент (второй пример):

    Ответ написан
    Комментировать
  • Что такое такое rest api?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    API социальных сетей - это вполне типичные примеры реализации REST API.

    REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передаётся информация, идентифицирующая пользователя (например, token, полученный через OAuth-авторизацию) и все параметры, необходимые для выполнения операции.

    Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше):
    1. получение данных с сервера (обычно в формате JSON, или XML)
    2. добавление новых данных на сервер
    3. модификация существующих данных на сервере
    4. удаление данных на сервере

    Операция получения данных не может приводить к изменению состояния сервера.

    Для каждого типа операции используется свой метод HTTP-запроса:
    1. получение - GET
    2. добавление - POST
    3. модификация - PUT
    4. удаление - DELETE

    Т.е. :

    GET-запрос /rest/users - получение информации о всех пользователях
    GET-запрос /rest/users/125 - получение информации о пользователе с id=125
    POST-запрос /rest/users - добавление нового пользователя
    PUT-запрос /rest/users/125 - изменение информации о пользователе с id=125
    DELETE-запрос /rest/users/125 - удаление пользователя с id=125
    Ответ написан
    20 комментариев
  • Какие требования бывают к верстальщику на фрилансе?

    Vnevremen
    @Vnevremen
    digital designer
    Технических требований как правило нету, в основном - быстро и чтобы работало... Качество кода почти никто не смотрит.
    Ответ написан
    Комментировать
  • Какие требования бывают к верстальщику на фрилансе?

    @Web__Nikita03
    Главное пиши, что умеешь. Я делал заказ - верстку. Потом нужна была натяжка на WordPress. Я это не умел, просто нанял другого человека за 25%. Вввод: что не умешь, проси другого. И главное будь всегда на связи с заказчиком.
    Ответ написан
    1 комментарий
  • Какие требования бывают к верстальщику на фрилансе?

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

    @svetlov97
    Совсем немного
    К верстальщику? HTML CSS JS. Если чисто верстальщик то только это. Получил PSD макет, сверстал, получил деньги
    Ответ написан
    Комментировать
  • Дайте оценку верстке?

    @Flying
    Визуально выглядит вполне пристойно и очевидных косяков почти нет, но если копнуть глубже - возникают вопросы.

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

    Из наиболее заметного - заглавная картинка с автомобилем в PNG которая занимает почти 600кб и из-за этого грузится весьма и весьма неспешно (и заметно для пользователя). В целом это по большей части косяк дизайнера, не приложившего усилий к тому чтобы выбрать правильную графику (автомобиль снят явно на улице и отражения в стёклах дают существенный вклад в визуальный шум и, как следствие, в размер картинки, нужно было выбирать фотографию сделанную в специальном помещении). Кроме того дизайнер, очевидно, не слышал про требования к такси в Нью-Йорке и рисовал как взбредёт в голову, но оставим это на его совести. Сочетание фоновой картинки, на которой весь траффик едет в обратном направлении и делает автомобиль такси нарушающим правила дорожного движения - тоже на совести дизайнера.

    Однако и в этом случае и, тем более, в случае фоновых изображений ниже по странице вы допускаете ошибки с выбором форматов файлов, способами их вставки в страницу и оптимизацией. К примеру из картинки с автомобилем можно выжать почти 100кб просто за счёт использования оптимизаторов. Гораздо грустнее ситуация с фоновыми картинками ниже по тексту. Во-первых вы сохраняете фотографии в PNG, получая на выходе файлы по мегабайту, хотя они же в JPEG занимали бы в 5-10 раз быстрее. Во-вторых вы, скорее всего, сохранили фоновые картинки уже обработанными (затемнёнными). Я не видел макета, но предположу что там эти картинки стоят в их оригинальном виде и на них наложены какие-нибудь фильтры. На первый взгляд кажется что проблемы нет, но на практике (в случае вёрстки для реального сайта) вы вынуждаете человека который будет поддерживать сайт либо готовить картинки с такой же пост-обработкой либо мириться с тем что стиль сайта меняется. Правильное решение здесь - грузить картинки как они есть и реализовывать фильтры на CSS, тем более что здесь это делается элементарно через multi background или псевдо-класс с полупрозрачным фоном. Очевидно также что для таких тёмных картинок вполне можно использовать JPEG с меньшим качеством и тем самым существенно сэкономить пользователям трафик.

    Ещё одна проблема связанная с фоновыми картинками - вы не подкладываете под них близкий по цвету solid color. Попробуйте включить в dev.tools "Network throttling", отключить кэш и перегрузить свою страницу - думаю вы поймёте что я имею в виду - белые блоки с белым текстом стоят довольно продолжительное время, постепенно заполняясь довольно тёмными картинками. Если бы background-color под ними был бы чёрным - проблемы бы не было.

    Далее - логотип. Обычно логотипы разрабатываются отдельно и даже если он выглядит просто набранным шрифтом - это вовсе не значит что это не так. Логотип Google, Microsoft или Яндекс - тоже просто название, но, надеюсь вы не сверстаете их, написав надпись текстом? В общем логотип = картинка, лучше в векторе. Сейчас даже одно съезжание слогана на пиксель влево относительно названия уже рушит всю конструкцию логотипа.

    Обратите внимание на то как вы работаете с формами. Все поля в форме являются <input type="text">, хотя часть названий явно намекает на date / time селекторы, а "Choose Vehicle" - на список выбора.

    Хотелось бы отметить работу с иконками - их всё-таки лучше хранить в SVG и либо требовать с дизайнера либо подбирать на том же Icon Finder. При этом оформление (те пресловутые жёлтые кружки) лучше делать через CSS т.к. это позволяет вам существенно гибче работать с размерами элементов.

    Есть всякие недочёты касающиеся responsive, к примеру, внимание как отображается блок "Our Tariffs" в размере чуть более 600px, в частности название тарифа и описание.

    Пожалуйста обратите внимание на то что вы используете два разных меню для desktop и mobile представления. В целом в вашем случае меню довольно простое и можно было бы обойтись одним. Конечно две копии используют часто, но у этого решения есть свои недостатки (в частности отсутствие синхронизации состояния), так что вы должны осознанно принимать решение по таким вопросам. Кроме того inline обработчики onclick там явно могут быть заменены на элементарный
    document.querySelectorAll('.menu a, .menu-hover a').addEventListener()
    что явно сделает код более простым и поддерживаемым.

    Ещё один важный момент который зачастую опускают при вёрстке - поведение макета с реальными данными. То что дизайнер в макете понапихал везде lorem ipsum и тексты примерно одинакового размера - отнюдь не означает что на реальном сайте эти условия будут соблюдаться. Отсутствие навыка проверять поведение макета в изменяющихся условиях ведёт к множеству ошибок которые не видны в условиях синтетических данных. К примеру попробуйте в блоке "We Do Best Than You Wish" (претензии по поводу английского языка оставим в стороне) в любом из элементов банально увеличить количество текста в 2-3 раза. В Chrome это приводит только к излому сетки, в Firefox - ещё и к изменению размера иконки. При этом я предполагаю что Firefox ведёт себя правильно т.к. пропорции элементов изменились, а ограничения размеров на картинки у вас не заданы.

    В целом похоже что макет верстался и проверялся только в Chrome. К примеру посмотрите как ведёт себя картинка с рукой и телефоном в Firefox при изменении размеров. Опять же Firefox вполне корректен т.к. вы не обрезали картинку корректно, предпочитая выгрузить "как есть" и подгонять положение в CSS, но забыв при этом про overflow: hidden для контейнера.

    Теперь перейдём к CSS:

    Обратите внимание на то как вы подключаете внешний шрифт:
    family=Lato:400,700,700i,900,900i&amp;subset=latin-ext
    . Возникают два вопроса:
    1. Зачем вам subset=latin-ext на сайте где есть только базовая латиница?
    2. Как вы выбирали начертания? У вас подключаются 5 начертаний (400, 700, 900 + два italic'а), при этом grep по CSS даёт значения font-weight 200, 300, 400, 500, 600, 800 и ни одного italic. Вам не кажется что эти множества почти не пересекаются?


    Кроме того вы постоянно забываете про fallback шрифты что на медленном интернете и при отсутствии инструкций для font loading приводит к невидимому контенту страницы на период загрузки.

    Отсутсвие ограничения по ширине для .wrapper приведёт к недопустимо широкому сайту на больших мониторах с высоким разрешением. Можете уменьшить масштаб страницы до 50% и полюбоваться результатом.

    В стилях повсеместно используются достаточно общие названия классов в global namespace. К примеру кто бы мог подумать что стилизует селектор .text? Вы уверены что нигде больше на сайте подобный селектор не встретится? Даже при дальнейшем развитии сайта? Другими словами именование селекторов - важная часть работы, вы можете использовать любую методологию (тот же БЭМ или что-то ещё) или разработать свою, но ваш код не должен ломаться при добавлении ещё пары блоков, особенно если это будет делать другой человек.

    Списки элементов, к примеру тот же .product-cont лучше делать именно списками, а не распихивать элементы по столбцам вручную, благо flexbox и column layout здесь всё прекрасно сделают за вас, зато имея одноранговый список вы обеспечите себе куда большую свободу действий.

    Использование id в качестве CSS селектора - плохая практика, но у вас таких мест немало, 11 штук.

    Уверен что мог бы найти ещё что-то, но надеюсь для затравки хватит, и так много получилось... :)
    Ответ написан
    4 комментария