Как подключить шрифт в React

год назад·3 мин. на чтение

Рассмотрим три быстрых способах подключения шрифтов в React приложение.

font В HTML используется для указания начертания, размера шрифта, типографики текста. Вы можете добавить шрифты в свое React приложение разными способами.

Способ 1. С использованием link

Мы можем ссылаться на любые шрифты из Интернета, с помощью тега <link> внутри HTML-файла. Рассмотрим пример применения Google Fonts шрифта с помощью тега <link>.
  1. Переходим в fonts.google.com
  2. Кликаем на шрифт
Реакт добавить шрифт
  1. Кликаем на “Select Regular 400” (или на любые другие выбранные виды, можно несколько)
Реакт добавить шрифт
  1. Нажимаем на иконку “View selected families” сверху справа.
Реакт добавить шрифт
  1. В появившемся боковом меню переходим в секцию “Use on the web” и копируем код, расположенный под <link>
Реакт добавить шрифт
  1. Переходим в index.html. Если ваше приложение создано с помощью create-react-app, то index.html находится в папке public. Вставляем код, скопированный в п.5 внутрь <head>.
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
  1. На сайте Google Fonts в том же боковом меню находим секцию “CSS rules to specify families” и копируем код.
Реакт добавить шрифт
  1. Переходим в CSS файл и добавляем следующий стиль, вставляем скопированный код:
.font-roboto {
  font-family: 'Roboto', sans-serif; /* скопированный код */
}
  1. Применяем этот стиль в любом React компоненте
// App.jsx

import './App.css';

function App() {
  return (
    <div className="font-roboto">
      <p>Hello</p>
    </div>
  );
}

export default App;

Способ 2. С использованием Web Font Loader

Web Font Loader помогает загружать шрифты из Google Fonts, Typekit, Fonts.com и Fontdeck, а также самостоятельно размещенные веб-шрифты. Он разработан совместно компаниями Google и Typekit. Давайте посмотрим, как загрузить несколько шрифтов из Google Fonts и использовать их в компоненте React.
  1. Установим webfontloader
yarn add webfontloader
или
npm i webfontloader
  1. Импортируем webloader в компонент
import WebFont from 'webfontloader';
  1. Загружаем нужные шрифты, используя имя шрифта. Лучше использовать хук useEffect и позволить ему выполняться один раз при загрузке компонента. Поскольку шрифты должны быть загружены только один раз в приложении, вы можете загрузить их в файле index.js.
useEffect(() => {
  WebFont.load({
    google: {
      families: ['Droid Sans', 'Chilanka']
    }
  });
 }, []);
Здесь мы загружаем шрифты 'Droid Sans' и 'Chilanka'.
  1. Теперь вы можете использовать эти шрифты в компоненте React с помощью атрибута className или style. Чтобы использовать атрибут className, создайте CSS-класс в файле .css.
.font-loader {
  font-family: 'Chilanka';
}
Затем, в методе render() компонента добавьте следующее.
<div className="font-loader">
    Hello, World!
</div>
Или, с атрибутом style
<div style={{fontFamily: 'Droid Sans'}}>
   Hello, World!
</div>

Способ 3. С использованием @font-face

Иногда шрифты должны быть загружены локально и упакованы в приложение. @font-face - это правило CSS для определения имени шрифта путем указания на него с помощью URL.
  1. Создадим папку fonts в каталоге src.
  2. Загрузим необходимые шрифты. В этом примере мы загрузим шрифт Lobster. Для этого выберем шрифт в Google Fonts, нажмем “Download family” и распакуем архив.
Реакт добавить шрифт
  1. Скопируем содержимое в папку src\fonts.
Реакт добавить шрифт
  1. Затем импортируем шрифты в файл index.js.
import './fonts/Lobster/Lobster-Regular.ttf';
  1. В файл index.css добавим
@font-face {
font-family: "LobsterRegular";
src: local("LobsterRegular"),
 url("./fonts/Lobster/Lobster-Regular.ttf") format("truetype");
font-weight: normal;
}
  1. Теперь добавим имя класса в файл App.css, который использует этот шрифт.
.font-lobster {
 font-family: "LobsterRegular";
}
  1. Применяем этот стиль в любом React компоненте
// App.jsx

import './App.css';

function App() {
  return (
    <div className="font-lobster">
      <p>Hello</p>
    </div>
  );
}

export default App;

Полное руководство по React Router v6. Часть 4 - Подробно о роутерах

год назад·3 мин. на чтение

В этой статье рассмотрим все виды роутеров из библиотеки React Router v6 - BrowserRouter, NativeRouter, HashRouter, HistoryRouter, MemoryRouter, StaticRouter.

В первой части мы говорили о настройке маршрутизатора и упоминали BrowserRouter и NativeRouter, но это не единственные типы роутеров. Всего существует 6 роутеров, и в этой части мы подробно рассмотрим каждый из них. Серия статей о React Router v6 состоит из 4 частей.
  1. Основы React Router
  2. Продвинутые определения маршрутов
  3. Управление навигацией
  4. Подробно о роутерах (рассматривается в этой статье)

BrowserRouter

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

NativeRouter

NativeRouter по сути является эквивалентом BrowserRouter, но для React Native. Если вы используете React Native, то это роутер, который вы захотите использовать.

HashRouter

Этот роутер работает очень похоже на BrowserRouter, но основное отличие заключается в том, что вместо того, чтобы изменять URL-адрес на что-то вроде http://localhost:3000/books он будет хранить URL-адрес в хэше, как http://localhost:3000/#/books. Как видите, этот URL-адрес имеет # после URL-адреса, который представляет собой хэш-часть URL-адреса. Все, что находится в хэш-части URL-адреса, является просто дополнительной информацией, которая обычно обозначает идентификатор на странице для целей прокрутки, поскольку страница будет автоматически прокручиваться до элемента с идентификатором, представленным хешем, при загрузке страницы. В React Router этот хэш на самом деле не используется для хранения идентификационной информации для прокрутки, а вместо этого он хранит информацию, связанную с текущим URL-адресом. Причина, по которой React Router делает это, заключается в том, что некоторые хостинг-провайдеры не позволяют вам фактически изменять URL-адрес вашей страницы. В этих очень редких случаях вы захотите использовать HashRouter, поскольку HashRouter не изменит фактический URL-адрес вашей страницы, а изменит только хэш вашей страницы. Если вы можете использовать какой-либо URL-адрес у своего хостинг-провайдера, то это не то, что вам следует использовать.

HistoryRouter

HistoryRouter (в настоящее время называется unstable_HistoryRouter) — это роутер, который позволяет вручную управлять объектом истории, который React Router использует для хранения всей информации, связанной с историей маршрутизации вашего приложения. Этот объект истории помогает убедиться, что такие вещи, как кнопки «Назад» и «Вперед» в браузере, работают правильно. Это роутер, который вы, вероятно, никогда не должны использовать, если у вас нет очень конкретной причины, по которой вы хотите перезаписать или контролировать поведение истории по умолчанию React Router.

MemoryRouter

MemoryRouter немного отличается от остальных роутеров, о которых мы говорили, поскольку вместо того, чтобы хранить информацию о текущем маршруте в URL-адресе браузера, этот роутер хранит информацию о роуте непосредственно в памяти. Очевидно, что это очень неподходящий роутер для обычных операций маршрутизации, но этот роутер невероятно полезен, когда вы пишете тесты для своего приложения, у которого нет доступа к браузеру. Из-за того, как работает React Router, вам необходимо, чтобы ваши компоненты были упакованы в маршрутизатор, иначе весь ваш код маршрутизации будет выдавать ошибки и ломаться. Это означает, что даже если вы хотите протестировать один компонент, вам нужно будет обернуть этот компонент внутрь маршрутизатора, иначе он будет выдавать ошибки. Если вы тестируете свой код таким образом, что у него нет доступа к браузеру (например, модульное тестирование), то маршрутизаторы, о которых мы говорили до сих пор, будут выдавать ошибки, поскольку все они зависят от URL-адреса в браузере. MemoryRouter, с другой стороны, хранит всю свою информацию в памяти, что означает, что он никогда не обращается к браузеру и идеально подходит при модульном тестировании компонентов. Однако, за исключением этого конкретного случая использования, этот маршрутизатор никогда не будет использоваться.

StaticRouter

Роутер StaticRouter также имеет очень специфический вариант использования. Этот маршрутизатор специально предназначен для серверного рендеринга ваших приложений React, поскольку он принимает один проп location и визуализирует ваше приложение, используя этот location в качестве URL-адреса. Этот роутер на самом деле не может выполнять какую-либо маршрутизацию и будет просто отображать одну статическую страницу, но это идеально подходит для рендеринга на сервере, поскольку вы хотите просто отобразить HTML вашего приложения на сервере, а затем клиент может настроить всю вашу маршрутизацию и так далее.
<StaticRouter location="/books">
  <App />
</StaticRouter>

Итоги

React Router — это огромная библиотека с множеством удивительных функций, поэтому она является популярной библиотекой для маршрутизации. Очень интересна реализация вложенных маршрутов, поскольку это значительно упрощает создание интуитивно понятных маршрутов.