• Fonts загружаются через webpack слишком долго?

    rockon404
    @rockon404
    Frontend Developer
    Fonts загружаются через webpack слишком долго

    Шрифты загружаются не через webpack, а по протоколу http/https

    Как итоге, шрифты грузяться почти минуту, и в итоге все прыгает.

    Почему так долго? Что я упустил?

    "...весят по 9 метров каждый"


    Web Fundamentals: Оптимизация шрифтов
    Ответ написан
  • Возможно ли с помощью hooks создать полноценную замену классовым компонентам?

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

    Почитать.
    Ответ написан
  • Подгрузка данный при помощи Аjax в React?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Пагинация
    Ответ написан
    Комментировать
  • Почему в вебпаке возникает ошибка Module parse failed?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    test: /\.js[x]?$/,

    UPD: entry у вас './jsx/app.jsx', а include path.join(__dirname, 'src'). Снесите include. И используте в проектах только свежие версии библиотек. Актуальная мажорная версия Webpack - 4.
    Ответ написан
    2 комментария
  • Где грань между версткой и front-end?

    rockon404
    @rockon404
    Frontend Developer
    Где грань, когда можно/нужно обойтись нативными средствами что бы меньше зависеть от либы/фреймворка/js и когда необходимо использовать front-end либы?

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

    Для верстки лендосов тянуть фронтенд фреймворки нет особого смысла.
    Второй макет можно реализовать на React/Vue как красивое одностраничное приложение с клиентским роутингом. Там и бронирование отеля и магазин. Думайте не о верстке, а о том как такие вещи как бронирование и магазин реализовывать будете. Тогда может и придет понимание зачем во фронтенд разработке используют фреймворки и где та самая грань.

    Но с другой стороны есть повторяющиеся элементы, те же слайдеры от блока к блоку - можно было бы в react-овский HOC засунуть логику слайдера (это что касается второго макета).

    HOC используют не для этого.

    И в принципе с create-react-app или аналогом от vue было бы удобнее работать чем со сборкой на webpack

    Пока верстаете макеты и не работали в реальных проектах может быть и удобней. И да, create-react-app и аналог от Vue под капотом используют webpack.
    Ответ написан
    Комментировать
  • Почему event.preventDefault undefined?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1.
    const result = <a onClick={event => this.clickHandler('1', event)}>{item.title}</a>;


    2. Вызов event.preventDefault() ничего не возвращает. Другими словами, в консоли и должно быть undefined.
    Ответ написан
  • Как правильно привязать this плюс дополнительные параметри к обработчику клика в React?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    почему id undefined?

    А вы туда undefined и передаете.

    Исправленный вариант:
    constructor(props){
      super(props);
    
      this.postSelectedHandler = this.postSelectedHandler.bind(this, this.props.id);
    }
    Ответ написан
    1 комментарий
  • Как запретить открытые DevTools на сайте?

    rockon404
    @rockon404
    Frontend Developer
    Как запретить открытые DevTools на сайте?

    Никак

    С удивлением узнал что это возможно))) Как это сделано?

    Невозможно

    Т.е. при открытии сайта не работает f12. Веротяно перехватывают нажатие на кнопку f12?

    Это бессмысленно
    5c9d3282ec9f8951376769.png
    Ответ написан
    3 комментария
  • Как мне использовать React.lazy? Или какие есть альтернативы?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Проблема в том, что тут используется динамический импорт. Как я понимаю, его поддержка в браузерах пока неочень хорошая. А значит, он мне не подходит.

    Если вы в своем проекте не используете сброрщик вроде webpack, то у меня для вас плохие новости.
    Ответ написан
    Комментировать
  • Стоит ли верстать лендинг на react.js?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Стоит ли верстать лендинг на react.js?

    Не стоит.

    или же только форму, которая нуждается в нем.

    Поверьте не нуждается.
    Ответ написан
    5 комментариев
  • Это параллельное выполнение промиссов?

    rockon404
    @rockon404
    Frontend Developer
    будет ли выполнение параллельным в первом методе ?

    В вашем коде параллельное выполнение осуществляется за счет вызовов:
    const promise1 = new Promise(...)
    const promise2 = new Promise(...)

    так как Promise начинают выполнение функции экзекутора сразу после создания.

    Но библиотеки основанные на Promise так не работают, они обычно возвращают Promise на определенный вызов:
    const someCall = (...someArgs) => new Promise((resolve, reject) => { /* ... */ });

    В таком случае:
    // последовательный вызов 
    const [result1, result2] = [await someCall(), await someOtherCall()];
    
    // параллельный вызов
    const [result1, result2] = Promise.all([someCall(), someOtherCall()]);
    Ответ написан
    1 комментарий
  • Манипуляции со state и несколько вопросов по рендерингу и архитектуре в реакт?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Что с именами? NewsItem, setItem, result, clickFilter, styles, buy - никогда не пишите подобного даже в шутку. Замените: NewsItem на Product(или ShopItem), setItem - вообще удалите, result на products, clickFilter на handleAddToCartClick, styles на className, buy на cart.

    2. Нет никакого смысла передавать в ShopItem каждое свойство товара по отдельности. Только усложняете анализ вашего кода. Лучше:
    {products.map(product => (
      <ShopItem
        key={product.id}
        className={'item'}
        item={product}
        onAddToCartClick={this.handleAddToCartClick}
      />
    )}


    3. Base path на то и base path, что не должен содержать конкретный эндпоинт. Правильно:
    const BASE_PATH = 'https://api.punkapi.com/v2';
    
    /* ... */
    
    fetch(`${BASE_PATH}/beers`)


    Каким образом добавить полученные "товары" в корзину? Я не смог использовать значения из state.result для последующего их добавления в state.basket.
    result это просто массив из объектов. Можно получить доступ к любому товару с помощью this.state.result[индекс_объекта], но ничего с этими данными напрямую делать у меня не получается, как и с помощью setState

    Если вы не понимаете как работать с данными(массивы, объекты), то вам стоит сейчас заострить свое внимание на изучении этого вопроса:
    JavaScript: Структуры данных
    Вам вообще нет смысла копировать товар в массив cart, туда можно складывать только id товара и количество:
    class Store extends Component {
      state = {
        products: [],
        cart:[],
      };
    
      handleAddToCartClick = (id, quantity) => {
        const { cart } = this.state;
        const itemIndex = cart.findIndex(item => item.id === id);
    
        if (itemIndex !== -1) {
          const newCart = [...cart];
          newCart[itemIndex] = { id, quantity: cart[itemIndex].quantity + quantity };
          this.setState({ cart: newCart });
        } else {
          this.setState(prevState => ({
            cart: [
              ...prevState.cart,
              { id, quantity },
            ],
          }));
        }
      };

    const ShopItem = ({ className, item, onAddToCartClick }) => (
      <div>
        {/* ... */}
        <button onClick={() => onAddToCartClick(item.id, 1)}>Добавить в корзину</button>
      <div/>
    );

    Вопрос вытекает из 1го, а нормальная ли это практика добавлять в state данные, полученные из API? Если нет, то где тогда можно их хранить?

    По-хорошему, в redux store. redux стоит использовать тут хотя бы потому, что те же данные о товарах понадобятся и в корзине, и на странице checkout.

    Я хотел создать у каждого "товара" кнопку, которая будет менять стиль КОНКРЕТНО этого товара (это не несет никакой смысловой нагрузки, но мне хотелось это реализовать чтобы понять некоторые вещи).
    У моего компонента NewsItem есть пропс styles, который устанавливает стиль в компонент.

    Самый простой вариант использовать хук useState:
    import React, { useState } from 'react';
    
    const ShopItem = ({ className, item, onAddToCartClick } ) => {
      const [isActive, setIsActive] = useState(false);
      
      handleToggleActiveClick = () => {
        setIsActive(!isActive);
      };
    
      return (
        <div>
          <ul className={`${className}${isActive ? ' active' : ''}`}>
            {/* ... */} 
            <button onClick={handleToggleActiveClick}>Toggle active</button>
          </ul>
        <div/>
      );
    }
    Ответ написан
    1 комментарий
  • Что еще необходимо знать, чтобы стать junior Front-end разработчиком?

    rockon404
    @rockon404
    Frontend Developer
    Junior Frontend Developer на минималках:
    1. Хорошие знания JavaScript
    2. Хорошие знания CSS/HTML
    3. Знакомство с любым современным фреймворком

    Junior Frontend Developer здорового человека(конкурентоспособный):
    1. Хорошие знания JavaScript
    2. Хорошие знания CSS/HTML
    3. Хорошие знания API любимого фреймворка
    4. Умеет работать с git на базовом уровне
    5. Умеет работать с npm пакетами
    6. Знает как написать простой конфиг webpack
    7. Умеет TypeScript/Flow на базовом уровне
    8. На github лежит типовой TodoList/WeatherApp
    9. Английский язык на уровне достаточном для чтения технической литературы
    10. Умеет находить решения типовых задач на stackoverflow и проблем в issues на github

    Frontend roadmap
    Ответ написан
    1 комментарий
  • Как развиваться дальше во фронтенде?

    rockon404
    @rockon404
    Frontend Developer
    Веб-студии - трата времени, если, конечно, не собираетесь в последствии открывать свою или оказывать подобные услуги на фрилансе.
    Осваивайте любой современный фронтенд фреймворк и идите работать в компанию с серьезными проектами и сильной командой.
    Ответ написан
    Комментировать
  • Как настроить webpack для expressjs backend и frontend?

    rockon404
    @rockon404
    Frontend Developer
    Использовать один конфиг с двумя entrypoint?

    Лучше использовать разные конфиги с shared частью. Для сервера, например, нет смысла тянуть в бандл зависимости из node_modules. Переменные окружения могут иметь разные значения и тд.

    Возможно ли будет прикрутить hot-reload?

    Возможно.


    Как настроить webpack для expressjs backend и frontend?

    Тут все зависит от задач, которые перед вами стоят и набора инструментов которые вы хотите использовать. Примеры можете посмотреть в многочисленных статьях на эту тему и на Github.
    Ответ написан
    1 комментарий
  • Почему роутинг в react не работает правильно для вложенных роутов?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Ссылки по id.

    Лучше использовать slug.

    Создал rout положил его возле основного rout-а.

    Во-первых не rout, а route. Во-вторых не ясно что и где вы создали. Видимо, речь идет о /shop и /shop/:productId?

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

    Вангую проблемы с ссылками на статику. Они у вас скорее всего строятся относительно пути в строке браузера. Просто откройте вкладку network и проверьте. Это, кстати, именно то, что вы должны были сделать в первую очередь.

    Возможно мне надо переместить дочерний роут внутрь компонента родительского роута?

    Нет. В этом нет никакого смысла. Советую заглянуть в исходные коды компонентов Router, Switch и Route чтобы понимать как это работает.
    Ответ написан
    6 комментариев
  • Выбор JS стека для ЛК - на чем остановиться?

    rockon404
    @rockon404
    Frontend Developer
    Есть желание сделать простейшую CRM

    Сделайте для начала простейший ToDo List/WeatherApp.

    Какую БД лучше использовать?

    Любую. MongoDB или MySQL вам за глаза.

    Какой зоопарк фреймворков использовать?

    Любой современный фреймворк.
    Ответ написан
    6 комментариев
  • Где необходимо размещать componentDidMount и componentDidUpdate?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Забудьте это нелепое разделение обязанностей. сomponentDidMount и componentDidUpdate лишь хуки жизненного цикла, которые надо применять там, где есть необходимость в их использовании.
    Ответ написан
    Комментировать
  • Как не скачивать одни и те же данные с API, если не было изменений?

    rockon404
    @rockon404
    Frontend Developer
    Как не скачивать одни и те же данные с API, если не было изменений?

    Запрашивать только новые и измененные данные.
    Ответ написан