• Что выбрать RTK Query, Thunk или Saga?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    Все они не дружат с серверным рендерингом, поэтому лучше использовать TanStack Query.
    Ответ написан
    4 комментария
  • Как отключить создание папки ".vscode"?

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

    Если не хочешь, чтобы она попадала в репозиторий - добавь её в gitignore.

    Для понимания, что именно там сохранилось - надо смотреть
    Ответ написан
    3 комментария
  • Как наследовать стили в Styled Components?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Если хотите изменить стили React.Component надо передавать методе render свойство className. Так же можно вынести все элементы компонента в статические поля, чтобы позже переопределять их стили.
    const Wrapper = styled.div`
      // some styles
    `;
    
    const ChildElement = styled.div`
      // some styles
    `;
    
    class MyComponent extends React.Component {
      static ChildElement = ChildElement;
      
      render() {
        const { className } = this.props;
    
        return (
          <Wrapper className={className}>
            <ChildElement>Some text</ChildElement>
          </Wrapper>
        )
      }
    }
    
    export default MyComponent;


    const SyledMyComponent = styled(MyComponent)`
      // some styles
    
      ${MyComponent.ChildElement} {
        // some styles for ChildElement
      }
    `;


    Метод extend работает только со StyledComponent:
    const AbstractElement = styled.div`
      // some styles
    `;
    
    const ConcreteElement = AbstractElement.extend`
      // some styles
    `;
    Ответ написан
    6 комментариев
  • Как можно сделать React навигацию по страницам пользователей по их id?

    Seasle
    @Seasle Куратор тега JavaScript
    import * as React from 'react';
    import { createRoot } from 'react-dom/client';
    import { BrowserRouter, Routes, Route, Link, useParams } from 'react-router-dom';
    
    const users = [
      {
        id: 1,
        firstName: 'John',
        lastName: 'Doe',
        age: 27
      },
      {
        id: 2,
        firstName: 'Emily',
        lastName: 'Green',
        age: 29
      }
    ];
    
    const Home = () => {
      return (
        <ul>
          {users.map(user => (
            <li key={user.id}>
              <Link to={`/${user.id}`}>{user.firstName} {user.lastName}</Link>
            </li>
          ))}
        </ul>
      );
    };
    
    const User = () => {
      const params = useParams();
      const id = parseInt(params.id);
      const user = users.find((entry) => entry.id === id);
      if (user === undefined) {
        return <p>User not found</p>;
      }
    
      return (
        <>
          <ul>
            <li><storng>Firstname</storng>: {user.firstName}</li>
            <li><storng>Lastname</storng>: {user.lastName}</li>
            <li><storng>Age</storng>: {user.age}</li>
          </ul>
          <Link to="/">Go back</Link>
        </>
      );
    };
    
    const root = createRoot(document.getElementById('root'));
    
    root.render(
      <BrowserRouter>
        <Routes>
          <Route index element={<Home />} />
          <Route path=":id" element={<User />} />
        </Routes>
      </BrowserRouter>
    );

    https://reactrouter.com/
    Ответ написан
    Комментировать
  • Можно ли написать в React компонент на js, вместо jsx?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    только начал React изучать

    Рекомендую таки сначала закончить, дочитать документацию 2 раза и вопрос сам собой отпадёт. В документации есть пример компонента С jsx и БЕЗ него. Надо просто дочитать.
    Ответ написан
    Комментировать
  • Какое оптимальное время въехать в проект?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    От проекта зависит. На моëм проекте например новичкам даже сеньорского уровня до первой простой таски требуется недели две, а выход на 100℅ эффективность занимает 3-6 месяцев.
    Ответ написан
    9 комментариев
  • Какой выбрать маршрутизатор для учебы?

    @TheBigBear
    СтарОдмины мы
    Keenetic если совсем начинающий
    Всё на русском, интерфейс простой и понятный, потом сменишь на английский
    можно добавлять удалять модули.
    Mikrotik если хочешь начать ДЕЙСТВИТЕЛЬНО разбираться. Обэксперементируешься по самое нехочу. Но нужен хоть какой-то опыт
    Ответ написан
    8 комментариев
  • Какой выбрать маршрутизатор для учебы?

    @Joyz
    Начинать учится надо с разных книжек.
    Ну и чтобы просто поиграться, то вообще никакой маршрутизатор можно не покупать.
    Достаточно поставить программный в виртуалке типа Mikrotik CHR или pfSense, OPNsense.

    Если просто хотите посмотреть веб интерфейс маршрутизаторов:
    Keenetic
    https://giga.demo.keenetic.pro/
    Логин и пароль - demo

    Asus
    https://demoui.asus.com/

    TP-Link
    https://www.tp-link.com/ru/support/emulator/

    Linksys
    ui.linksys.com

    Cisco Small Business Online Devices
    https://community.cisco.com/t5/small-business-onli...
    Ответ написан
    Комментировать
  • Когда использовать React.memo?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    но почему его почти не используют ?

    А на основе чего такой вывод? Мне показалось наоборот, всякую оптимизацию используют везде, даже там где она делает только хуже.

    (без собственного состояния)

    Внутренний стейт компонента не влияет на результат работы своего memo, memo сравнивает только пропсы.

    По логике вещей каждый компонент (без собственного состояния), даже который не использует props, должен быть обернут в memo, но так не делают, почему?


    Тут есть условности. У меня например вот такие правила:

    Оборачиваем в memo обязательно, если - родительский компонент часто перерендеривается без изменений пропсов вашего компонента. Если ваш компонент не обернуть в memo, то он будет столько же перерендериваться, сколько и родительский. Но тут я бы обернул ваш компонент в родительском в useMemo (если на хуках писать).

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

    Можно обернуть в memo, если - компонент рисует сложную верстку с большим количеством других компонентов, и имеет сложный код в рендере или в useEffect (без зависимостей, который выполняется на каждый рендер).

    В остальных случаях можно не использовать memo, если на то не указывают исследования производительности конкретно вашего приложения.

    Еще важно следить за перерендерами, чтобы родитель не передавал пропсы, у которых на каждом рендере разная ссылка, пример:
    <MemoComp onClick={() => console.warn('hello')} />
    в таком случае, memo не будет работать. Это можно еще случайно пропустить, если не используете TypeScript/Flow, то вот такой код
    <MemoComp isActive={item || isEnabled} />
    будет перерендериваться лишний раз, если вдруг окажется, что item это объект с нестабильной ссылкой.

    В общем, главное понимать, что простой memo быстрее простого рендера, нужно просто не допустить двойную работу, когда при любом рендере будет сравниваться memo и происходить рендер.
    Ответ написан
    1 комментарий
  • Какой инструмент горячей перезагрузки компонентов лучше всего подходит для стека React + Redux и React + Mobx?

    Как наиболее популярный - webpack, но я видел, что многие хвалят vite за простоту и скорость, по сравнению с webpack (сам только планирую его где-нибудь применить)
    Ответ написан
    Комментировать
  • Как правильно подобрать комплектующие?

    @ewgenc
    Взять Ryzen 5600G и мать на b450. ОЗУ и SSD по оставшимся средствам. Встроенное видео в этом процессоре уже на уровне 1050ti, смысла тратить деньги на устаревшую видюху нет.
    Ответ написан
    Комментировать
  • Как хранить сайт на гитхабе?

    xenon
    @xenon
    Too drunk to fsck
    Хостить такие статические сайты можно на разных хостингах: github pages, gitlab pages (да, у них же хостите и гит-репозиторий и у них же сайт), netlify, cloudflare pages.

    Общая схема: если хостинг там же, где и репозиторий, то обычно через CI/CD делается. Если снаружи (например, репозиторий на гитхабе, а хостинг на cloudflare), то при обновлении репозитория дергается хук и хостинг выкачивает новые странички себе.

    Возможно вам будет интересно почитать про концепцию JAMstack, это как бы "старые" статические сайты (которые быстро загружаются из CDN, не рендерятся на сервере), как из 90-ых, но со всеми фичами из XXI века через javascript API. Вот авто-обновление контента на хостинге из репозитория - это часть JAMstack.
    Ответ написан
    Комментировать
  • Как хранить сайт на гитхабе?

    Get-Web
    @Get-Web
    Front-End Developer
    Видео от Вадима Макеева, одного из участников проекта Дока: https://www.youtube.com/watch?v=hevU4NdIsoU
    Ответ написан
    Комментировать
  • Как хранить сайт на гитхабе?

    Alex_mos
    @Alex_mos
    Google всему голова
    Сайт «Доки» работает на базе Eleventy. При помощи Nunjucks-темплейтов Eleventy превращает статьи в формате Markdown в HTML-страницы.

    Проект собирается с помощью GitHub Actions и хостится на сервере, читайте подробнее про деплой


    У них вроде в репозиторий все расписано, если брать конкретно сайт doka.

    Если нужно разместить сайт на GitHub то в интернете много информации по этому вопросу
    Ответ написан
    Комментировать
  • Как хранить сайт на гитхабе?

    paran0id
    @paran0id
    Умный, но ленивый
    Можно задействовать https://www.netlify.com - там даже на бесплатном тарифе это работает.
    Ответ написан
    1 комментарий
  • Нормально ли не понимать в начале react?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Изучение новой темы — как обход дерева*.
    Попался непонятный момент, ставить на паузу и разбираться с непонятной темой. В процессе, возможно, встретятся ещё непонятности, с ними так же поступать. Рекурсия! : )

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

    * – дерево не во дворе, а как структура данных.
    Ответ написан
    Комментировать
  • Можно ли как то сократить запись однотипных импортов в js?

    miraage
    @miraage
    Старый прогер
    Создайте в папке ProdCards index.js файл, которые будет экспортить все возможные prod1-8.
    Затем уже импортите либо
    import * as prodCards from '../components/ProdCards'
    или же
    import { prod2, prod7 } from '../components/ProdCards'
    Ответ написан
    Комментировать
  • Класс wrapper в html зачем он нужен?

    Stalker_RED
    @Stalker_RED
    Вот так без стилей совершенно непонятно зачем. Откроойте css, посмотрте какие стили применяются к wrapper-у, и станет понятно. Может на body они не применяются в принципе, или на body одни, а на wrapper-е другие.

    Вот на тостере, например, вместо wrapper-а layout. Не позволяет растягиваться контенту на больших мониторах.
    dEfsRiN.png
    Ответ написан
    3 комментария
  • Как надежно хранить фото и видео?

    @pfg21
    ex-турист
    для "крайне холодного" хранения посоветую M-disc
    запилить на m-disc блюреи и на дальнюю полочку - 200 лет пролежат.

    если пилить на обычные диски - раз в пять лет понадобится их обновлять. раз в десять лет для "хороших".
    Ответ написан
    1 комментарий