Обложка канала

Заметки про React

Короткие и полезные заметки про React

  • Заметки про React

    Все что я хотел бы знать перед миграцией на RSC В блоге Mux вышла статья с фидбеком по миграции проекта на RSC. В ней автор рассказывает с чем столкнулись во время миграции и дает советы по использованию RSC. Основные проблемы, которые отмечены в статье: - Отсутствие поддержки CSS-in-JS. - Не работает React Context в серверных компонентах. - Дополнительная сложность в разработке при использовании RSC. Миграция была проведена поэтапно. Сначала добавьте директиву "use client" в корне приложения. Потом переместите директиву "use client" как можно ниже по дереву. Если возникают проблемы с производительностью, то используйте Suspense и старайтесь большие библиотеки использовать на сервере. www.mux.com/blog/wh…mponents
    We migrated 50,000 lines of code to React Server Components | Mux

    Here's everything we learned by migrating our production applications to React Server Components — including how to mix Client and Server Components.

    Mux
  • Заметки про React

    Истоки JSX и почему он существует JSX  – это JavaScript с синтаксическими приемами, облегчающими представление HTML. Это похоже на Sass, который транспилируется в CSS. Чтобы написать простой HTML код с помощью JS, потребуется много кода. Чтобы упростить написание HTML кода на JavaScript, появилась библиотека HyperScript:
    const h = require("hyperscript");
    document.body.appendChild(
     h("div", { id: "content" },
      h("div", { id: "child" },
       h("p", null, "text")
      )
     )
    );
    
    Но такой код сложно читать и понимать. Для решения данной проблемы появился JSX. Он позволяет писать код похожий на HTML и транспилируется в JS. Например:
    const el = (
     <div id="content">
      <div id="child">
       <p>text</p>
      </div>
     </div>
    );
    
    // Транспилируется в следующий код:
    
    const el = (React.createElement("div", { id: "content" },
     React.createElement("div", { id: "child" },
      React.createElement("p", null, "text"))));
    
    Код похож на HyperScript, вместо h используется React.createElement. В TypeScript это можно изменить. Есть параметр jsxFactory, с помощью которого можно изменить JS функцию создания элемента. Например, можно использовать h из preact вместо React.createElement по умолчанию. dodov.dev/blog/or…t-exists
    Origins of JSX and Why It Exists

    As if plain JavaScript wasn't complex enough already…

    Hristiyan Dodov
  • Заметки про React

    “Помогите, я Джун!” Подкаст для тех, кто только начинает свой захватывающий путь в IT или сталкивается с сомнениями и трудностями. Давайте вместе разбираться в том: - как войти и остаться в IT, - как не перегореть, - как достигать своих профессиональных и карьерных целей, - как стать и оставаться востребованным и крутым айтишником. Мы вместе с гостями хотим делиться с вами нашим опытом и накопленными знаниями. И будем рады вашим вопросам, предложениям и замечаниям) Перед каждым следующим выпуском, мы будем анонсировать, кто придет к нам в гости заранее. Вы можете написать здесь интересующие вас вопросы. Самые интересные и частые, мы зададим гостям во время записи. https://t.me/+SJQPyQhe-ZVkNDQy
  • Реклама

  • Заметки про React

    Vaul – базовый drawer компонент Под капотом компонент использует примитив Dialog от UI библиотеки Radix. На странице в github есть несколько примеров использования.
    import { Drawer } from 'vaul';
    
    function MyComponent() {
      return (
        <Drawer.Root>
          <Drawer.Trigger>Open</Drawer.Trigger>
          <Drawer.Portal>
            <Drawer.Content>
              <p>Content</p>
            </Drawer.Content>
            <Drawer.Overlay />
          </Drawer.Portal>
        </Drawer.Root>
      );
    }
    
    https://vaul.emilkowal.ski/
  • Заметки про React

    Кастомный хук для переходов без мерцаний В своем блоге Джеймс Керр поделился кастомным хуком для предотвращения мерцаний при переключении данных на графике. Каждый раз, когда пользователь выбирает другой набор данных для графика, происходит запрос на сервер за новыми данными и перерисовка графика. Когда запрос вернет данные, то произойдет мерцание интерфейса при рендере графика с новыми данными. Для решения данной проблемы автор написал кастомный хук useDataTransition. Верхнеуровнево нужно предотвратить дочернему компоненту видеть новые данные до тех пор, пока не завершится переход или не истечет время ожидания.
    export function useDataTransition<T>(
      real: T,
      inTransition: boolean,
      timeout: number
    ) {
      const [timeExpired, setTimeExpired] = useState(false)
      const cache = useRef(real)
    
      useEffect(() => {
        if (!inTransition) cache.current = real
      }, [inTransition, real])
    
      useEffect(() => {
        let id: number
        if (inTransition) {
          id = setTimeout(() => setTimeExpired(true), timeout)
        } else {
          setTimeExpired(false)
        }
        return () => clearTimeout(id)
      }, [inTransition, timeout])
    
      if (inTransition && !timeExpired) return cache.current
      else return real
    }
    
    www.jameskerr.blog/posts/u…ansition
    React Hook for Avoiding Flash of Empty UI While Data Transitions

    Walk through a React hook that avoids the flash of empty UI when old data is cleared and new data is fetching.

    www.jameskerr.blog
  • Заметки про React

    React95 – UI библиотека вдохновленная Windows 95 React95 – это полноценная UI библиотека в стилистике Windows 95. В ней есть все основные UI элементы, а что самое главное – она не заброшена, а развивается, судя по репозиторию в Github. Помимо UI библиотеки есть отдельные проекты с React95, например тема для Gatsby в стиле Windows 95. https://github.com/React95/React95 react95.github.io/React95…/React95
    GitHub - React95/React95: A React components library with Win95 UI

    A React components library with Win95 UI. Contribute to React95/React95 development by creating an account on GitHub.

    GitHub
  • Заметки про React

    React Query и React Context Одной из лучших особенностей React Query является то, что можно использовать запрос в любом месте дерева компонентов. Если запрос уже был выполнен и результат закэширован, то вернутся закэшированные данные. Если запрос еще не был выполнен, то React Query запросит данные и вернет их. Доминик Дорфмайстер в своем блоге разобрал пример использования React Query вместе с React Context. Например, есть компонент <ProductTable>, который использует хук useCurrentUserQuery для получения информации о пользователе. Внутри есть компонент UserNameDisplay, который отображает имя пользователя и рендерится, только если пользователь существует. Если не использовать проп-дриллинг, а только React Query, то в компоненте UserNameDisplay переменная data из хука useCurrentUserQuery со стороны TypeScript будет обозначаться как потенциальная undefined. Но мы знаем, что она не undefined и хотим использовать ее без ненулевого оператора утверждения. Для решения данной проблемы можно использовать контекст, в котором будут переложены значения из React Query. В этом случае при использовании контекста будет явно видно, что запрос о пользователе был выполнен и данные уже существуют.
    const CurrentUserContext = React.CreateContext<User | null>(null)
    
    export const useCurrentUserContext = () => {
      const currentUser = React.useContext(CurrentUserContext)
      if (!currentUser) {
        throw new Error('CurrentUserContext: No value provided')
      }
    
      return currentUser
    }
    
    export const CurrentUserContextProvider = ({
      children,
    }) => {
      const currentUserQuery = useCurrentUserQuery()
      // --snip--
      return (
        <CurrentUserContext.Provider value={currentUserQuery.data}>
          {children}
        </CurrentUserContext.Provider>
      )
    }
    
    tkdodo.eu/blog/re…-context
    React Query and React Context

    Can it make sense to combine React Query with React Context ? Yes, sometimes ...

    tkdodo.eu
  • Заметки про React

    MDX Editor – редактор markdown разметки Автор библиотеки react-virtuoso, Петьо Иванов, представил библиотеку MDX Editor – редактор markdown разметки. Особенность этого markdown редактора в том, что он поддерживает WYSIWYG режим. Кроме этого редактор поддерживает: - Блоки кода с предварительным просмотром с помощью Sandpack. - Поддержка таблиц, изображений, кастомизации тулбара. - Возможность отображения diff изменений. https://mdxeditor.dev/
    MDX Editor - the Rich Text Markdown Editor React Component

    mdxeditor is an open-source React component that lets your users edit markdown documents naturally, just like in Google docs or Notion.

    mdxeditor.dev
  • Заметки про React

    Демистификация RSC с NextJS 13 App Router Туториал, объясняющий как работает React Server Components в NextJS. Туториал рассчитан на последовательное прочтение глав, начиная от базовых вещей и заканчивая более продвинутым материалом. В туториале объясняется что такое RSC, как он интегрируется с клиентскими компонентами, почему может возникнуть ошибка гидратации и т.д. Сам сайт туториал сделан упрощенно специально. Автор предлагает склонировать репозиторий с туториалом и проходить его локально, изучая RSC на практике. https://demystifying-rsc.vercel.app/
    Demystifying React Server Components with NextJS 13 App Router

    Understand RSC by digging into the details of how it really works

    demystifying-rsc.vercel.app
  • Заметки про React

    Галерея D3.js графиков на React React Graph Gallery – примеры графиков с использованием D3.js и React. Каждый пример разобран по шагам и сопровождается объяснением использования API. Для анимаций в некоторых примерах используется react-spring. Хорошая подборка наиболее популярных типов графиков, которые можно самостоятельно кастомизировать, используя D3.js. https://www.react-graph-gallery.com/
    Learn to build unique charts with React

    The React Graph Gallery displays hundreds of charts made with React, always with explanation and reproduciible code

    React-Graph-Gallery
  • Заметки про React

    Понимание SVG путей В своем блоге Нанда Шахрасяд опубликовала гайд по использованию атрибута d в SVG путях. Атрибут d может выглядеть как магическое заклинание, но на самом деле он представляет из себя серию команд, которая говорит браузеру как должен быть отрисован путь. В гайде разобраны абсолютные и относительные команды, курсоры, как рисовать линии и закрывать путь, про кривые Безье и дуги. Во всех темах есть интерактивные примеры и самостоятельные задания на практику. https://www.nan.fyi/svg-paths
    A Deep Dive Into SVG Path Commands

    An interactive guide to understanding SVG paths and path commands.

    Not a Number
  • Заметки про React

    Не наступил ли у React момент переписывания Angular.js на Angular? Обзор нового подхода к разработке на React с помощью Server Components. При использовании серверных компонентов меняется подход к разработке. Например, для получения данных вместо useEffect и react-query нужно использовать fetch и асинхронные компоненты. При этом fetch – это улучшенная версия fetch от React с кэшированием и дедупликацией запросов. Помимо react-query для разработки не доступны и другие популярные библиотеки, например, material-ui, styled-components, emotion. CSS-in-JS не будет работать в серверных компонентах. Плюс React в том, что в проекте серверные компоненты можно использовать по желанию. Серверные компоненты хорошо подходят для сайтов, где важна SEO оптимизация или есть сложные вычисления в компонентах, которые лучше делать на сервере. https://habr.com/ru/articles/746918/
    Не наступил ли у React момент переписывания Angular.js на Angular?

    В 2012 году Angular.js серьёзно поменял frontend-разработку. Фреймворку от Google тогда очень быстро удалось снискать популярность у разработчиков. И вот уже буквально через два года его разработчики...

    Хабр
  • Заметки про React

    Создание бесшовного мультиязычного UI в React Туториал по созданию мультиязычного UI с помощью react-i18next. Внутри него показывается, как использовать хук useTranslation, как сменить язык и как использовать файлы переводов. react-i18next – одна из наиболее популярных библиотек для переводов, поддерживает TypeScript и популярные фреймворки. www.honeybadger.io/blog/cr…th-react
    Creating a seamless multi-language user interface in React

    Learn how to create apps that can display information in different languages based on user preferences. In this article, we'll walk through the process of building a weather application with multi-language support using react-i18next.

    Honeybadger Developer Blog
  • Заметки про React

    HolyJS в поисках спикеров! На конференции HolyJS открыт CFP — Call for papers. И нет, это не «звонок для бумаги». Это ребята ищут спикеров, которые хотят выступить на конференции. Если вы хотите поделиться знаниями или интересным кейсом компании, подавайте заявку на выступление. Расскажите о графике и анимациях, языках, бэкенде, инструментах разработки, UI-разработке и soft skills. Полный список тем — на сайте. И не стесняйтесь предлагать свои. Вы можете выступить онлайн или офлайн и выбрать любой формат выступления — доклад, воркшоп, интервью, обсуждение, BoF-сессию или придумать что-то свое.  На этапе подачи заявки подойдут даже примерные тезисы, необязательно иметь уже готовый доклад. После отправки заявки Программный комитет поможет доформулировать идею и превратить ее в доклад. А персональный куратор пройдет с вами весь путь — от идеи до продакшена: сделает ревью, поможет с доработкой, проведет репетиции и даст рекомендации по выступлению. Подавайте заявки до 25 июля.
  • Заметки про React

    Пишем хорошие компоненты, которые захочется переиспользовать, а плохие — не пишем На Хабре вышла статья, в которой рассказывают про признаки хорошего и плохого компонента в React. Основные признаки того, что компонент плохой: - Сложный: делает слишком много, используются сложные технологии для решения простых проблем. - Неконсистентный: использование пропсов не соответствует ожидаемому поведению. - Props hell: большое количество пропсов, которое со временем становится сложно поддерживать. Признаки хорошего компонента: - Гибкость: компонент адаптируется к использованию в разных сценариях. - Коробочность: удобство использования компонента вне проекта. - Зависимость: чем меньше зависимостей, тем гибче и надежнее компонент. habr.com/ru/comp…s/739330
    Пишем хорошие компоненты, которые захочется переиспользовать, а плохие — не пишем

    Привет! Меня зовут Антон Крылов, я фронтенд-разработчик в Авито — занимаюсь профилями. До Авито я работал тимлидом и видел много хорошего и плохого кода. В этой статье — мои наблюдения и размышления...

    Хабр
  • Реклама

  • Заметки про React

    Расстаемся с SVG-in-JS в 2023 году Хранение SVG в JS бандле ухудшает производительность сайта и будет лучше использовать SVG в HTML, сохраняя JS бандл небольшим и быстрым. В блоге Джейкоб Гросс вышел обзор использования SVG в JS и почему это неправильно, а также как правильно хранить и использовать SVG на сайте. Основная причина, почему SVG в JS это плохо – производительность. При хранении SVG в JS браузеру приходится тратить больше времени на парсинг и компиляцию. Плюс там, где есть парсинг, там и увеличение объема использованной памяти для хранения результатов. Особенно эти проблемы с производительностью ощущают пользователи недорогих смартфонов. Есть несколько практик вставок SVG на сайте, каждый из них может использоваться в разных ситуациях: - Использование тега <img />. - Использование SVG и <use /> для спрайтов текущего домена. - Использование CSS и mask-image для спрайтов любых доменов. https://kurtextrem.de/posts/svg-in-js
    Breaking Up with SVG-in-JS in 2023

    Technical deep-dive on why you shouldn't have SVGs in your JS bundle and better techniques for JSX usage.

    kurtextrem.de
  • Заметки про React

    Как работает useState() внутри React В блоге JSer вышел обзор по устройству хука useState() в React. В обзоре рассматривается исходный код хука, функция изменения стейта, процесс обновления стейта в потоке рендера компонента. К исходному коду даны комментарии автора по тому, что делает определенный участок кода и в каких случаях он выполняется. jser.dev/2023-06…ate-work
    How does useState() work internally in React?

    useState() might be most important hook in React since it is the only state hook. Let's figure out how it works internally and also dive into its caveats.

    jser.dev
  • Заметки про React

    Создание лучшего и более быстрого представления кода В блоге Github вышла статья о том, как разрабатывалась новая страница просмотра исходного кода репозитория. Авторы описали проблемы, с которыми столкнулись при разработке этой страницы, а также пути решения. Например, при открытии исходного файла с большим количеством строк возникла проблема с производительностью: создание подсветки кода занимала много времени. Для решения проблемы использовали виртуализацию, т.е. генерировали подсветку только для части кода видимой в окне браузера. Виртуализация добавила другую проблему – перестал работать поиск по документу через Ctrl + F. Для быстрого решения проблемы нужно было создать свой поиск по документу. github.blog/2023-06…ode-view
    Crafting a better, faster code view | The GitHub Blog

    The new GitHub Code View brings users many new features to improve the code reading and exploration experiences, and we overcame a number of unique technical hurdles in order to deliver those features without compromising performance.

    The GitHub Blog