Компоненты/Призма

Призма

Pro
28 сентября 2026

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

Установка

import { useEffect, useMemo } from "react";
import Animated, { useSharedValue } from "react-native-reanimated";
import { StyleSheet, View } from "react-native";

Установка через CLIPro

Команда станет доступна после оформления Pro.

Оформить ProВойти

Файлы

index.tsx
НазадСетчатый градиентДалееСлипстрим

Три семейства тонких световых полос плавно изгибаются по кадру, и каждая раскладывается на цветные края, как свет, прошедший сквозь стекло. Поверх ложится лёгкая виньетка и зерно. Эффект не требует касаний и подходит как фон для заголовка: затемнение центра приглушает полосы там, где стоит текст.

Шейдер считается целиком на GPU через Skia, время идёт на UI-потоке Reanimated — React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения», приложение свёрнуто или передан paused. Работает на iOS, Android и в вебе.

Вручную

Поставьте зависимости:

npm install @shopify/react-native-skia react-native-reanimated
pnpm add @shopify/react-native-skia react-native-reanimated
yarn add @shopify/react-native-skia react-native-reanimated
bun add @shopify/react-native-skia react-native-reanimated

Скопируйте эти файлы в src/shared/components/organisms/prism/:

index.tsx
import { useEffect, useMemo } from "react";
import Animated, { useSharedValue } from "react-native-reanimated";
import { StyleSheet, View } from "react-native";
// Полный исходник открывается с подпиской Pro
export interface PrismProps {
speed?: number;
intensity?: number;
palette?: "aurora" | "mono";
interactive?: boolean;
}
export function Prism({
speed = 1,
intensity = 0.6,
interactive = true,
}: PrismProps) {
const progress = useSharedValue(0);
const frame = useMemo(() => createFrame(speed), [speed]);
useEffect(() => {
// …

Код доступен по подпискеPro

Исходник «Призма» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.

Оформить ProВойти

Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.

Использование

usage.tsx
import { useEffect, useMemo } from "react";
import Animated, { useSharedValue } from "react-native-reanimated";
import { StyleSheet, View } from "react-native";
// Полный исходник открывается с подпиской Pro
export interface PrismProps {
speed?: number;
intensity?: number;
palette?: "aurora" | "mono";
interactive?: boolean;
}
export function Prism({
speed = 1,
intensity = 0.6,
interactive = true,
}: PrismProps) {
const progress = useSharedValue(0);
const frame = useMemo(() => createFrame(speed), [speed]);
useEffect(() => {
// …

Код доступен по подпискеPro

Исходник «Призма» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.

Оформить ProВойти

По умолчанию компонент занимает ширину родителя и высоту height. Чтобы растянуть его фоном на весь экран, передайте fill. tint и background задаются тройками RGB от 0 до 1.

Пропсы

Пропс
Описание
speed?

Тип number

dispersion?

Тип number

clearCenter?

Тип boolean

tint?

Тип PrismRGB

background?

Тип PrismRGB

exposure?

Тип number

grain?

Тип number

paused?

Тип boolean

fill?

Тип boolean

width?

Тип number

height?

Тип number

borderRadius?

Тип number

children?

Тип ReactNode

style?

Тип StyleProp<ViewStyle>