Пропс своими руками

Добавил пользователь Валентин П.
Обновлено: 31.08.2024

Совсем недавно состоялся релиз 6-ой версии react-router. Вообще создатели react-router часто меняют подходы, используемые в библиотеке, но в этот раз они объединили лучшее, что было в прошлых версиях.

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

Поиграть с новой версией можно тут.

Switch -> Routes

Вместо компонента Switch теперь появился компонент Routes. Но это не просто переименование — Routes более функционален. Основное отличие в том, что Routes не требует жесткого порядка роутов внутри.

Switch обходил роуты в строгом порядке сверху вниз и при первом совпадении пути рендерил заданный компонент. Поэтому важно было определить порядок: например, выносить вниз наиболее общий роут. Рассмотрим пример:

В таком случае по любом URL рендерился бы компонент Home. Чтобы этого избежать, пришлось бы поставить в конец Switch.

Это срабатывает даже с более сложными кейсами, например с именованными параметрами. Пример из документации:

По урлу teams/new откроется не компонент Team, а NewTeamForm, хотя путь teams/:teamId тоже матчится с урлом teams/new.

Относительные пути

Следующее важное нововведение — относительные пути. Раньше в пропсе path у компонентов Route нужно было указывать полный путь, например:

И в роутах внутри компонента Courses пришлось бы тоже указывать полные пути:

Теперь вам достаточно указать относительный путь в пропсе path. Он будет автоматически добавлен к пути родительского роута. Например, компонент Courses теперь можно написать так:

Element вместо Component / render

Это, пожалуй, одна из самых удобных фичей, которые появились в новом роутере.

Раньше в компоненте Route был выбор: либо указать компонент для рендера, либо передать render-prop функцию. В первом случае код выглядит красиво:

Но у него есть существенный недостаток. Вы не могли прокинуть дополнительные пропсы в компонент из родителя. Проблема решалась использованием render-функции:

В новой версии роутера даже этого делать не придется. Оба этих пропса заменены на один — element. В него можно передать любой JSX-элемент. Пример выше в таком случае будет выглядеть так:

Это намного более удобно, сокращает код и делает его визуально более понятным.

Отказ от withRouter и новые хуки

В react-router был HOC withRouter, которым нужно было обернуть компонент, чтобы у него появились нужные для роутинга пропсы, например, объект истории, location, параметры и тд.

С появлением хуков в функциональных компонентах смысл использования HOC’а, который добавляет лишнюю обертку над компонентом, пропал. React-router добавил поддержку хуков useHistory, useLocation, useParams, которые отвечали за получение объекта истории, локейшна и сматченных параметров.

В 6 версии HOC withRouter вообще не упоминается, а все пропсы роутера рекомендуется получать через хуки useNavigate, useLocation, useParams.

Вложенные роуты

У этого изменения более глубокие корни. Чтобы понять мотивацию, придется вернуться аж к версии react-router v1.

В первой версии была возможность указать вложенные роуты прямо в конфиге:

Либо в качестве children’ов в компоненте Route:

В примере выше в обоих случаях в компоненте App нужно рендерить children:

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

В более поздних версиях роутера эту возможность убрали, заменив на возможность вставить Route на любом уровне вложенности в компонентах.

Однако это не единственная возможность сделать вложенные роуты! Возможность использовать Routes на любом уровне вложенности остается:

Обратите внимание на "*" в пропсе path роута /students/*.

Звездочка означает, что данный роут будет матчиться с урлами вида /students/что-либо. При рендере компонента Students для урлов с параметров после /students/ будет рендериться компонент Student. Основное отличие от того, что было раньше — звездочка.

Кстати, пропс exact исчез. Благодаря звездочке в нем пропала необходимость. Получается, что звездочка в пути отражает, что роут может матчиться с вложенными роутами. Если же звездочки нет — то только при точном совпадении пути. Это одна из важных особенностей при переводе проекта на v6, как и исключение регулярных выражений из пути, и опциональных параметров.

Примеры из документации:

Индексные роуты

Индексные роуты также вернулись к нам из v1-v3. В v4 индексные роуты были заменены на exact. Их назначение — отрендерить некоторый компонент по заданному пути в случае точного совпадения. Пример из документации:

Компонент Activity будет отрендерен на месте внутри компонента Layout.

Таким образом, получается удобная композиция вложенного роута, который нужно отрендерить, если путь полностью соответствует родительскому (path = “/” в примере выше отрендерит Layout c Activity внутри).

useRoutes вместо react-router-config

Как уже упоминалось выше, в роутере v1 существовала возможность задать конфиг роутера для всего приложения. Это было особенно удобно для серверного рендеринга, когда на сервере важно знать структуру роутов приложения.

Затем эта возможность переместилась в отдельный пакет react-router-config.

Пример из документации:

Такая конфигурация позволяет декларативно указать структуру роутов приложения.

Заключение

Есть и другие изменения, но я постарался подсветить наиболее интересные — на мой взгляд — и рассмотреть их через призму истории развития библиотеки. Создатели react-router часто меняют парадигмы, требуя от разработчиков изучения новых подходов, но с каждым разом библиотека становится только удобнее и функциональнее.

Naturpr (1)

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

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

Коврик

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

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

27427071930_8e662de5e4_o-1 (1)

Одеяла

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

Ремень

Необходим при выполнении некоторых асан в том случае, если тело ещё не очень гибкое. Ремень в этой ситуации выполняет функцию удлинителя для рук или ног.

yoga-props1 (1)

Кирпичики

Прямоугольные бруски из дерева, пены или пробки. Самый популярный вспомогательный предмет после коврика. Кирпичики выполняют функцию опоры и широко используются при наклонах и позах на скручивание.

Болстер

Сиршасана-пропс

yoga-props2-300x300 (1)

Идеальный вариант для тех, кто только начинает практиковать сиршасану (стойку на голове). Состоит из двух опорных столбиков, с мягкими подкладками для плеч и двух кирпичиков, на которые ставят руки.

При использовании этого приспособления голова свободно провисает, что уменьшает давление на шейные позвонки, перенося вес тела на плечи.

Поэтому сиршасана-пропс отлично подходит тем, у кого есть проблемы с шейным отделом позвоночника.

Лавка Випарита Дандасана

yoga-props3 (1)

Кроме описанных выше, существует множество более сложных и массивных пропсов. Например, лавка Випарита Дандасана.

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

Интересно, что этот предмет — не новое изобретение, лавка была придумана более четырёх тысяч лет назад.

Wu Zepu, китайский 3D-художник, расскажет о процессе создания работы Clone средствами CryEngine и 3ds Max.

3D_papa_kak_sozdat_okruzhenie_01

Для создания работы Clone я проделал ряд следующих шагов:

  1. Создал готовую модель и текстуры.
  2. Импортировал файлы в движок.
  3. Настроил параметры CryEngine.
  4. Задал параметры материалов CryEngine.
  5. Просмотрел сцену на наличие ошибок.

Моделирование и текстурирование

Сначала я смоделировал сцену в 3Ds Max с помощью примитивов, после чего перешел к пропсам. UV-развертку стен и пола, а также трафареты я использовал повторно.

3D_papa_kak_sozdat_okruzhenie_02

3D_papa_kak_sozdat_okruzhenie_03

3D_papa_kak_sozdat_okruzhenie_04

Пример использованных трафаретов/декалей

Пропсы

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

3D_papa_kak_sozdat_okruzhenie_05

Примеры лоупольных и хайпольных моделей

UV-развертка и многоразовые трафареты

В этом проекте я использовал многие элементы, созданные ранее. Например, такие как:

3D_papa_kak_sozdat_okruzhenie_06

Повторное использование некоторых UV-разверток стен

3D_papa_kak_sozdat_okruzhenie_07

Повторное использование трафаретов

3D_papa_kak_sozdat_okruzhenie_25

Максимальная сетка финальной модели

Карты

В этом проекте я использовал такие карты, как Diffuse, Specular, Normal, Displacement, Gloss, Detail (для этой карты использовал градиент). В старой версии движка карта Diffuse работает с каналами Gloss и Specular, в новой версии она также работает и с каналом Normals. Карту Displacement можно назначать как отдельный канал.

3D_papa_kak_sozdat_okruzhenie_09

Некоторые из карт, использовавшиеся для текстурирования сцены

3D_papa_kak_sozdat_okruzhenie_10

Градиент базовой текстуры

Импорт файлов

На различные материалы и объекты можно назначать разные ID. После назначения ID я выбираю путь к файлу, что сохранить все и подготовить к импорту в CryEngine.

3D_papa_kak_sozdat_okruzhenie_11

Процесс назначения ID и сохранения/импорта файлов

Настройки CryEngine

Далее я настроил в сцене свет. Сначала я установил базовые источники света, а затем создал карты.

3D_papa_kak_sozdat_okruzhenie_12
3D_papa_kak_sozdat_okruzhenie_13
3D_papa_kak_sozdat_okruzhenie_14

Процесс освещения сцены

Материалы CryEngine

Исходя из приведенных ниже изображений в сцене я использовал различные материалы:

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

Пропсы для йоги

А между тем, существует один небольшой, но важный секрет, открывающий дверь в йогу абсолютно всем. Правильное выполнение асаны – это принятие наиболее близкого к идеальному положения тела в пределах ваших возможностей, и полное расслабление в ней. Вот и весь секрет. Для того, чтобы помочь вам расслабиться в принятой вами позе, и существуют пропсы.

Виды пропсов

Кирпич для йоги, или опорный блок для йоги - самое популярное приспособление. Изготавливается из пробки, специальной пены и дерева. Он помогает дотянуться до пола руками в скручиваниях сидя или стоя, поддерживает ноги и ладони. Форма кирпича позволяет использовать пропс, выбирая оптимальную для вас высоту.

Болстер – специальный мягкий валик с наполнителем, как правило, из гречишной шелухи, поскольку именно она лучше всего подстраивается под изгибы нашего тела. Используют болстер в асанах лёжа. Он помогает расслаблять шею или верхнюю и нижнюю части тела, способствует выпрямлению и правильному растягиванию позвоночника.

Ремень для йоги даёт возможность людям, не имеющим должной пластичности, максимально растягиваться. Также ремень используется для увеличения нагрузки во время занятия йогой.

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

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

Одеяло или плед в сложенном виде позволяет поднять тело на необходимую высоту в асанах сидя или стоя на коленях. Также пледом принято укрываться, выполняя Шавасану в прохладном помещении, чтобы холод не отвлекал вас от расслабления.

Практикуя асаны с приспособлениями и без, вы сможете определить, нужны ли именно вам пропсы. Купить все эти и другие вспомогательные аксессуары для йоги вы можете в нашем магазине.

Читайте также: