• Как добавить класс через rest?

    0xD34F
    @0xD34F Куратор тега React
    const Button = ({ children, className = '', ...rest }) => (
      <button {...rest} className={`button ${className}`}>
        {children}
      </button>
    );
    Ответ написан
    2 комментария
  • Какова практика создания мультидоменных сайтов?

    Aetae
    @Aetae
    Тлен
    Просто делай отдельный файл конфига\локали и пусть сервер подгружает в соответствии с доменом. Самому билду вообще лучше ничего не знать о конкретных доменах, для лёгкой переносимости.
    Ответ написан
    1 комментарий
  • Какова практика создания мультидоменных сайтов?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Есть у меня 1 проект, написан на nuxt. У нас для каждого города свой поддомен по типу msk.mysite.ru и т.п.
    Отличия лишь 2, это цены и страница с контактами. Для НН она одна, для остальных доменов другая. Домены реализованы через nginx. Но, т.к. у нас по итогу, на серваке фронт и бек лежат вместе, то поддомен у обоих одинаковый. А значит запрос автоматом запросит нужные данные.

    Если у вас именно разные сборки для разных доменов. То делаете множество билдов для разных доменов. А nginx будет брать нужную и отображать.

    Делать разные сайты очень глупо. В случае, если домен у api один, а фронт живёт сам по себе на другом, достаточно просто посылать заголовок с городом бекенду, который сам должен рулить нужными данными.

    Есть в практике другие сайты, мультиязычные. Использовали i18n для превода интерфейса. Перевод хранится в json файлах, для нужной локали загружается нужный json. Так же, бекенду передаётся в заголовке с запросом текущая локаль, для того, что бы бекенд отдавал контент с нужным переводом.

    Всё просто.
    Ответ написан
    2 комментария
  • Какова практика создания мультидоменных сайтов?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Это в общем то вкусовщина но почему не один домин с языковыми префиксами и фалбэком на сайт по умолчанию? Это позволит в том же роутере манипулировать не только языком но и подгрузкой компонентов в зависимости от языка. Ваш подход с разбором адреса тоже нормален
    Ответ написан
    4 комментария
  • Как создать на React корзину?

    Вообще, вопрос вы задали достаточно интересный. Однако проблема в том, что ответ на него достаточно массивный, если конечно отвечать полностью.

    Потому, к сожалению, придётся немного сократить.

    Представим, у вас есть небольшой магазин, где присутствует несколько товаров. Например, это будут простые телефоны. Структура одного товара довольно простая: картинка, название, описание и кнопка купить.
    Под капотом всё обстоит немного иначе. У нас будет массив, внутри которого есть объекты с данными. В объект будет входить: название продукта, описание продукта, картинка на продукт и уникальный идентификатор. Пример одного объекта будет немного ниже.

    {
      id: 0,
      name: "Nokia 3310",
      description: "Телефон, переживший падение в жерло вулкана",
      url: "https://static.shiftdelete.net/wp-content/uploads/2018/05/nokia-3310-1-milyon-volt-yuke-dayandi-sdn-01.jpg",
      price: 2800
    }


    Поскольку React приложения являются одностраничными, потому-то и называются SPA, что в переводе на нормальный “single page application”. У нас будет несколько страниц: первая страница с продуктами, где можно приобрести какой-то товар, а вторая страница — это простая корзина.

    Думаю, с роутингом проблем не должно возникнуть. Однако, если те возникнут, можете посмотреть это видео. На английском, на русском.

    Теперь определимся.

    При нажатии на кнопку «Купить» должно произойти действие. Продукт, который мы купили должен попасть в корзину, а при переключении на страницу корзины показываться на странице. Возникает вопрос, как это сделать?

    Ответ довольно простой: создать пустой массив, в который мы и будем скандировать все купленные продукты. И именно данный массив и будет отображаться на странице корзины. Объект купленного продукта будет, например, таким.

    {
      id: 0,
      name: "Nokia 3310",
      description: "Телефон, переживший падение в жерло вулкана",
      url: "https://static.shiftdelete.net/wp-content/uploads/2018/05/nokia-3310-1-milyon-volt-yuke-dayandi-sdn-01.jpg",
      price: 2800,
      count: 1
    }


    На странице у нас будет несколько кнопок. Первая отвечает за удивление продукта из корзины, вторая за добавление ещё одного товара, и последняя за удаление одного товара. При каждом нажатии, мы будет обращаться к массиву с объектами и искать нужный элемент. Если он есть, то при покупке, изменять его count, добавляя один. Как это будет происходить?

    Расскажу про алгоритм добавления элемента в массив:
    1. При нажатии, мы будет получать его идентификатор.
    2. Затем проходимся по массиву через цикл find получаем сам объект.
    3. В конце записываем полученный объект в массив. (P.S. Запомните одно важное правило, поскольку в React или Redux нельзя изменять состояние, использовать push следует крайне осторожно. В данном случае использовать push не стоит, пригодиться spread-оператор).


    Хоть и написал в ответе, продублировать здесь лишним не будет. Утром не смог добавить пример. Однако, исходя из вашего изначального вопроса о магазине, написал простенький пример.

    Скажу сразу, повторение кода в примере сознательное. Если будете делать нечто такое самостоятельно, избегайте повторение кода, поскольку это может повлиять на поддержку приложения. Да и вообще, повторять код не есть хорошо, если тот конечно не сознательно повторённый.

    Сам пример: CodeSandbox (Cart)
    Ответ написан
    8 комментариев
  • Насколько грамотно построено взаимодействие между фронтом и бэком?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Сам подход нормальный, и смысл реакта никак не теряется. Более того, некоторые считают подобные вещи более прогрессивным подходом а фреймворки типа Gatsby.js этот подход развивают куда дальше чем описанное у вас.

    Грамотно это у вас сделано или нет - зависит от того как сделано.
    Если в window кладутся просто настройки типа языка и прочего - то тут вообще сложно что-то криво сделать.
    с условной загрузкой компонент в зависимости от роута на сервере тоже нет проблем если сделано хорошо
    Ответ написан
    1 комментарий
  • Насколько грамотно построено взаимодействие между фронтом и бэком?

    @disappearedstar
    Фронтенд-разработчик
    Реакт — это не фреймворк для SPA, а библиотека для создания интерфейсов. В крупных и/или старых веб-приложениях, особенно на этапе постепенного внедрения нового стека и перехода на SPA, вполне уместна и практикуется описанная вами схема, когда роутинг реализуется классически через многостраничность, а рендеринг происходит частично на сервере, а частично — на клиенте, причем дорисовываемые на клиенте куски интерфейса ("виджеты") могут быть как компонентами, так и самостоятельными реакт-приложениями (вместо реакта можно подставить любую другую библиотеку/фреймворк). Передавать данные через window тоже нормально, если эти данные уже были сформированы на сервере и использованы для серверного рендеринга.
    Ответ написан
    1 комментарий
  • Что из фронтэнда должен знать бакэнд разработчик?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Прям должен - да никаких.
    Хорошим бонусом будет иметь представление о том, как во фронте удобно принимать данные и работать с ними, чтобы отдавать в удобном виде.
    Также бонусом (лично для вас) будет умение сверстать что-то простенькое - хоть на том же бутстрапе.
    Сноска про бутстрап

    Ни одному профильному специалисту никогда не буду советовать использовать бутстрап (только для ознакомления), но бэкендщику - позволительно, так как бутстрап фактически изначально задумывался для тех, кто особо вникать не хочет, а страничку набросать надо. Но потом что-то пошло не так >.<

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

    А вообще пересечений никаких, если не метите на позицию фулстака :)
    Ответ написан
    Комментировать
  • Как правильно сделать адаптивную шапку на сайте с точки зрения SEO?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Здравствуйте.
    Конечно, идеальный вариант - обойтись одной разметкой и для десктопа, и для мобильных устройств. Но в ряде случаев это невозможно.

    Тут встаёт выбор, чем нам пожертвовать:
    • можно принести на алтарь скорость разработки, сложность дальнейшей поддержки и UX, с помощью JS отслеживая размер экрана и на лету перестраивая шапку из одной разметки в другую;
      • Поисковики довольны - есть один контент;
      • Пользователи не очень довольны - они эти перестроения могут заметить, либо дольше ждут загрузки;
      • Разработчики очень недовольны (особенно когда год спустя клиент приходит и говорит "а давайте сюда вот добавим вот такой блок" и надо вспомнить логику всех этих хитрых переставлений).

    • можно пожертвовать потенциальным удобством поисковиков и сделать полный дубль блока для мобильных устройств.
      • Поисковики, вероятно, смотрят с недоверием;
      • Пользователи довольны - никаких перестроений на лету они не видят;
      • Разработчики довольны - получается структура, которую легко можно понять и поддерживать.


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

    Логика подсказывает, что дубли контента на странице не очень радуют поисковые системы.
    Практика отвечает, что всем насрать это ни на что не влияет и нужно сосредоточиться на более важных вещах.

    Делайте как вам и пользователям удобнее, у поисковиков есть проблемы гораздо более серьёзные, чем дважды повторённый логотип в соседних блоках.
    Ответ написан
    3 комментария
  • Не работает ctrl+/ и ctrl+shift+/ в Sublime Text 3?

    no_one
    @no_one Автор вопроса
    пол дня потратил на поиск решения, все облазил вдоль и поперек, оказалось все проще - ctrl + / или ctrl + shift + / - здесь слэш я нажимал который находиться на цифровой клавиатуре справа (над циферками), а нужно нажимать слэш находящийся возле клавиши enter (случайно нажал) и все работает, или я дурак или лыжи не едут :) я в шоке!
    Ответ написан
    4 комментария