Кроссплатформенный и мобильный интерфейс · Новый ресурс

Дизайн-система React Native Elements.

Создайте полноценный конструктор плана концентрации с React Native Elements 5.0.0: реальные роли темы, управляемые поля ввода и варианты выбора, проверка данных, локальное подтверждение и протестированная веб-сборка.

Руководство OpenDesign7 глав39 справочных записейАвторское руководство по приложению
01

React Native Elements Предпросмотр интерфейса дизайн-системы

Измените задачу, длительность и вариант перерыва; проверьте валидацию, оформление и сброс.

Составьте локальный план концентрацииОткрыть полный пример
Нативные RNEUI 5.0.0 через React Native Web 0.21.3 и React 19.2.0. · Справочник по реализации
02

React Native Elements Справочник по дизайн-системе

Настройки по умолчанию из закреплённой версии RNEUI, публичные API компонентов и явно обозначенные решения приложения.

Цвета светлой темы

Источник
Название / правилоЗначение / конфигурацияПрименение
lightColors.primary#2089dc Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.secondary#ad1457 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.background#ffffff Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.black#242424 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.white#ffffff Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.grey1#43484d Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.grey2#5e6977 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.grey5#e1e8ee Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.success#52c41a Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.error#ff190c Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
lightColors.warning#faad14 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.

Цвета тёмной темы

Источник
Название / правилоЗначение / конфигурацияПрименение
darkColors.primary#439ce0 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.secondary#aa49eb Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.background#080808 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.black#f2f2f2 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.white#080808 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.grey1#bdc6cf Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.grey2#86939e Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.grey5#393e42 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.success#439946 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.error#bf2c24 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.
darkColors.warning#cfbe27 Фактическое значение темы RNEUI. В тёмном режиме визуальное значение ролей black и white меняется на противоположное; используйте активную тему, а не жёстко заданные литеральные цвета.

Интервалы по умолчанию и явные решения приложения

Источник
Название / правилоЗначение / конфигурацияПрименение
spacing.xs2Опубликованная запись интервалов по умолчанию; эти имена образуют объект темы, а не токены переменных CSS.
spacing.sm4Опубликованная запись интервалов по умолчанию; эти имена образуют объект темы, а не токены переменных CSS.
spacing.md8Опубликованная запись интервалов по умолчанию; эти имена образуют объект темы, а не токены переменных CSS.
spacing.lg12Опубликованная запись интервалов по умолчанию; эти имена образуют объект темы, а не токены переменных CSS.
spacing.xl24Опубликованная запись интервалов по умолчанию; эти имена образуют объект темы, а не токены переменных CSS.
Sample heading32px / weight 700Оригинальное решение примера, явно заданное в предоставленном исходном коде, а не официальный глобальный тип или токен радиуса.
Sample body15px / 23px line heightОригинальное решение примера, явно заданное в предоставленном исходном коде, а не официальный глобальный тип или токен радиуса.
Sample cards24px padding / 8px radiusОригинальное решение примера, явно заданное в предоставленном исходном коде, а не официальный глобальный тип или токен радиуса.
Button component defaultradius: 6Оригинальное решение примера, явно заданное в предоставленном исходном коде, а не официальный глобальный тип или токен радиуса.

Контракты компонентов и провайдера

Источник
Название / правилоЗначение / конфигурацияПрименение
createThememode, components, lightColors, darkColorsThemeProvider получает сформированный объект; настройки по умолчанию сохраняются, если меняются только компоненты.
useThemetheme, updateThemeДействие смены оформления переключает режим, не сбрасывая состояние приложения.
Inputvalue, onChangeText, errorMessage, refОшибка пустой задачи отображается, а фокус возвращается к соответствующему полю ввода.
ButtonGroupbuttons, selectedIndex, onPressУправляемый индекс выбирает 15, 25 или 45 минут; он не задаёт длительность напрямую.
Switchvalue, onValueChangeУправляемое логическое значение меняет описание перерыва.
CardCard.Title, Card.DividerСтруктурированные поверхности наследуют выбранную тему.
Buttontitle, onPress, typeДействие сохранения проверяет локальное состояние; сброс восстанавливает значения по умолчанию.
SafeAreaProviderOuter application providerНеобходимый контекст интеграции; успешная работа в вебе не подтверждает корректное поведение безопасных областей на нативных устройствах.
03

React Native Elements Полное руководство по дизайн-системе

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

DESIGN-react-native-elements.md

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

Скачать руководство

Дизайн-система React Native Elements Среда выполнения и поддержка веб-платформы

Запустите компоненты с реальной темой

В этом примере используются @rneui/themed и @rneui/base версии 5.0.0, React 19.2.0 и React Native Web 0.21.3. При сборке для браузера react-native заменяется на react-native-web, а модули .web.js выбираются раньше общих JavaScript. Это настоящие компоненты библиотеки, отображаемые в вебе, а не HTML-блоки, имитирующие скриншот мобильного приложения. В предоставленный файл сборки включён этот вариант разрешения модулей, поэтому автономный код воспроизводит предпросмотр.

Из этого руководства OpenDesign

Разделяйте данные для веба и нативных платформ

Здесь показан редактор плана концентрации, а не работающий таймер или менеджер уведомлений. SafeAreaProvider оборачивает приложение, как того требует интеграция, но этот браузерный тест не проверяет отступы iOS и Android, работу нативной клавиатуры или разрешения устройства на отправку уведомлений. Для нативного проекта помимо общих примеров компонентов нужны сборка под соответствующую платформу и проверки на устройстве.

  • Веб-отображение работает на React Native Web.
  • План хранится только в локальном состоянии React.
  • Таймер, системное уведомление или сохранение на сервере не запускаются.

React Native Elements Объекты темы и цвета дизайн-системы

Используйте роли активной темы

createTheme объединяет встроенные цвета светлой и тёмной тем с любыми явными переопределениями. В примере меняются только настройки компонентов по умолчанию и режим. useTheme предоставляет окружающим элементам View и Text актуальные цвета, поэтому заголовок, описания и панели соответствуют выбранному оформлению. В тёмном режиме black обозначает светлую роль переднего плана, а white — тёмную роль поверхности; если считать эти имена буквальными значениями цветов, тема будет отображаться неправильно.

Не придумывайте универсальную шкалу типографики

RNEUI предоставляет настройки компонентов по умолчанию и средства настройки, а не ту же модель токенов, что и дизайн-система CSS. Поэтому в справочнике отдельно указаны реальные записи defaultSpacing и размеры из примера: заголовок 32px, основной текст 15px и радиус карточки 8px. Эти значения — оригинальные параметры композиции, заданные в коде. Их не следует описывать как обязательные фирменные правила React Native Elements.

React Native Elements Проверка ввода и управление фокусом в дизайн-системе

Явно управляйте текстом задачи

Для Input задаются value и обратный вызов onChangeText. Перед проверкой на пустое значение действие сохранения удаляет пробелы в начале и конце текста. Если поле пустое, errorMessage показывает понятное сообщение, а ссылка на компонент возвращает фокус в поле ввода. При изменении текста прежняя ошибка сбрасывается, а локальное подтверждение становится недействительным, чтобы сообщение о сохранении не относилось к уже изменённому плану.

Используйте подпись вместе с сообщением об ошибке

Видимая подпись Focus task и accessibilityLabel называют один и тот же элемент управления. Заполнитель подсказывает, что ввести, но не заменяет подпись. Проверка запускается явным действием сохранения, а не при каждом нажатии клавиши. После ошибки черновик остаётся у пользователя; анимация асинхронного сохранения не должна создавать впечатление запроса к несуществующему серверу.

React Native Elements Управляемый выбор в дизайн-системе

Отделяйте выбранный индекс от длительности

Для ButtonGroup задаются три подписи, selectedIndex и onPress. Возвращаемый индекс выбирает значение из исходного списка минут [15, 25, 45]; если использовать этот индекс непосредственно как количество минут, это приведёт к ошибке в приложении. Крупное числовое значение в предпросмотре вычисляется по тому же выбранному индексу, поэтому сегментированный переключатель и понятное пользователю описание плана всегда согласованы.

Сделайте выбор перерыва полноценным логическим значением

React Native Elements Сохранение и сброс состояния дизайн-системы

Не связывайте тему с планом

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

Используйте одно явное действие восстановления

Сброс плана восстанавливает пример задачи, длительность 25 минут и включённую настройку перерыва, очищает ошибку проверки и удаляет подтверждение. Выбранное оформление сохраняется. Так сброс содержимого отделяется от настройки темы и не вызывает неожиданную перезагрузку страницы. В примере нет слоя хранения, поэтому при повторном открытии документа отображается исходный пример.

React Native Elements Адаптивная компоновка дизайн-системы

Адаптируйте расположение двух карточек

Для выбора горизонтального расположения при ширине более 700px и вертикального при меньшей ширине используется useWindowDimensions. Внешние отступы каждой Card равны нулю, поэтому расположение выравнивается за счёт промежутка 24px. При ширине менее 500px внешние поля уменьшаются до 16px. В двух карточках представлены редактируемый план и производная сводка, а не повторяющиеся декоративные заполнители.

Проверьте стандартные настройки компонентов в обеих темах

Внутренние компоненты RNEUI могут использовать собственные стандартные стили в дополнение к глобальным цветам. Например, в этом примере для невыбранных сегментов ButtonGroup сохраняется стандартное оформление поверхности. Если продукту нужны другие контрастность или визуальная плотность, можно явно задать buttonStyle и selectedButtonStyle, но это решение следует проверить, а не считать результатом автоматического применения глобальной темы.

React Native Elements Полная настройка дизайн-системы для браузера

Добавьте настройки для веб-сборки и загрузчики ресурсов

В предоставленном build.mjs используется esbuild с разбором JSX для зависимостей JavaScript, подстановкой react-native-web, приоритетом .web.js и загрузчиками data для PNG- и TTF-ресурсов пакетов. Точка входа пакета содержит экспорты, ссылающиеся на эти ресурсы, даже если в видимой композиции нет значков. Поэтому сборку нельзя заменить обычным подключением необработанного исходного кода в браузере.

Проверьте все локальные взаимодействия

Сохраните предоставленный исходный код как rne.jsx, а HTML — как index.html, установите зафиксированные версии пакетов, выполните сборку и запустите сервер для этой директории. Проверьте пустую задачу, пользовательскую задачу, другую длительность, переключатель перерыва, оформление и сброс. Это позволяет проверить предоставленную композицию, но не означает автоматической проверки каждого экспортируемого компонента RNEUI или каждой нативной платформы.

  1. Храните все три предоставленных файла в одной директории.
  2. Установите зафиксированные зависимости и выполните node build.mjs.
  3. Раздавайте собранный пакет через index.html.
  4. Проверьте пустое, изменённое, оформленное темой и сброшенное состояния.

React Native Elements Примеры компонентов дизайн-системы

rne.jsx

Полная настройка провайдера, нативных компонентов и состояния приложения.

jsx
import React,{useState,useRef} from 'react';
import {createRoot} from 'react-dom/client';
import {View,Text,useWindowDimensions} from 'react-native';
import {ThemeProvider,createTheme,Button,ButtonGroup,Input,Switch,Card,Divider,useTheme} from '@rneui/themed';
import {SafeAreaProvider} from 'react-native-safe-area-context';
const theme=createTheme({mode:'light',components:{Button:{radius:6},Input:{containerStyle:{paddingHorizontal:0}}}});
function App(){const {theme,updateTheme}=useTheme();const {width}=useWindowDimensions();const [title,setTitle]=useState('Read a chapter'),[duration,setDuration]=useState(1),[breaks,setBreaks]=useState(true),[error,setError]=useState(false),[saved,setSaved]=useState('');const input=useRef(null);let c=theme.colors;function changed(){setSaved('')}function save(){if(!title.trim()){setError(true);input.current?.focus();return;}setError(false);setSaved(`${title.trim()} · ${[15,25,45][duration]} minutes · ${breaks?'with a short break':'no break reminder'}. Kept in this preview only.`)}return <View style={{backgroundColor:c.background,padding:width<500?16:32,maxWidth:1000,width:'100%',alignSelf:'center'}}><View style={{flexDirection:'row',justifyContent:'space-between',gap:24,flexWrap:'wrap',marginBottom:24}}><View style={{flexShrink:1}}><Text style={{color:c.primary,fontSize:13,fontWeight:'700'}}>REACT NATIVE ELEMENTS · WEB STUDY</Text><Text accessibilityRole="header" style={{fontSize:32,fontWeight:'700',color:c.black,marginTop:12}}>Make room for one thing</Text></View><Button title={theme.mode==='light'?'Use dark theme':'Use light theme'} type="outline" onPress={()=>updateTheme({mode:theme.mode==='light'?'dark':'light'})}/></View><Text style={{color:c.grey1,fontSize:15,lineHeight:23}}>An original focus-plan composer using RNEUI 5.0.0 through React Native Web. No timer or system notification is started.</Text><View style={{flexDirection:width>700?'row':'column',gap:24,marginTop:24}}><Card containerStyle={{flex:1,margin:0,padding:24,borderRadius:8}}><Card.Title>Shape your focus block</Card.Title><Card.Divider/><Input ref={input} label="Focus task" accessibilityLabel="Focus task" value={title} onChangeText={v=>{setTitle(v);setError(false);changed()}} errorMessage={error?'Enter a task before keeping this plan.':''} placeholder="What deserves your attention?"/><Text style={{fontSize:16,fontWeight:'700',color:c.grey1,marginBottom:8}}>Duration</Text><ButtonGroup buttons={['15 min','25 min','45 min']} selectedIndex={duration} onPress={i=>{setDuration(i);changed()}} containerStyle={{marginHorizontal:0,height:48,marginBottom:24}}/><View style={{flexDirection:'row',justifyContent:'space-between',alignItems:'center',gap:16,marginBottom:24}}><Text style={{fontSize:16,color:c.black,flexShrink:1}}>Include a short break</Text><Switch value={breaks} onValueChange={v=>{setBreaks(v);changed()}} accessibilityLabel="Include a short break"/></View><Button title="Keep this plan" onPress={save}/></Card><Card containerStyle={{flex:1,margin:0,padding:24,borderRadius:8}}><Card.Title>Your local plan</Card.Title><Card.Divider/><Text style={{fontSize:48,fontWeight:'700',color:c.primary}}>{[15,25,45][duration]}</Text><Text style={{fontSize:16,color:c.grey1,marginBottom:24}}>minutes for {title.trim()||'your next task'}</Text><Divider/><Text style={{color:c.black,fontSize:16,lineHeight:25,marginVertical:24}}>{breaks?'Finish with a pause before choosing what comes next.':'Keep the end of this block open; no break reminder is included.'}</Text><Text style={{fontSize:13,lineHeight:21,color:c.grey2}}>The duration, task and break choice are original application state. Theme colors, Input, ButtonGroup, Switch, Card and Button come from the installed library.</Text></Card></View><Text accessibilityLiveRegion="polite" style={{color:c.black,fontSize:15,lineHeight:23,marginTop:24}}>{saved}</Text><Button title="Reset the plan" type="clear" onPress={()=>{setTitle('Read a chapter');setDuration(1);setBreaks(true);setError(false);setSaved('');}} containerStyle={{alignSelf:'flex-start',marginTop:8}}/></View>}
createRoot(document.getElementById('root')).render(<SafeAreaProvider><ThemeProvider theme={theme}><App/></ThemeProvider></SafeAreaProvider>);

Справочник по коду

  • Используйте все три файла вместе с настройкой на зафиксированных версиях.

build.mjs

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

javascript
import {build} from 'esbuild';
await build({entryPoints:['rne.jsx'],bundle:true,minify:true,outfile:'rne.bundle.js',alias:{'react-native':'react-native-web'},resolveExtensions:['.web.js','.js','.jsx','.json'],loader:{'.js':'jsx','.ttf':'dataurl','.png':'dataurl'},define:{'process.env.NODE_ENV':'"production"'}});

Справочник по коду

  • Используйте все три файла вместе с настройкой на зафиксированных версиях.

index.html

Полный корневой документ, загружающий собранный пакет.

html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Focus plan composer</title><style>body{margin:0;background:#f4f7fa}*{box-sizing:border-box}input:focus-visible,[role=button]:focus-visible{outline:2px solid #2089dc;outline-offset:3px}</style></head><body><div id="root"></div><script src="./rne.bundle.js"></script></body></html>

Справочник по коду

  • Используйте все три файла вместе с настройкой на зафиксированных версиях.
04

React Native Elements Настройка агента для дизайн-системы

Отправная точка для реализации

Сначала сохраните предоставленные rne.jsx, build.mjs и index.html. Это проверенная браузерная сборка, а не настройка нативного приложения.

sh
npm init -y
npm install [email protected] [email protected] @rneui/[email protected] @rneui/[email protected] [email protected] [email protected] [email protected] --legacy-peer-deps
npm install --save-dev esbuild
node build.mjs
python3 -m http.server 8000

Запрос для вашего проекта

Промпт для AI-агента
Создайте компоновщик плана концентрации на базе RNEUI 5.0.0, используя полную браузерную сборку и провайдеры. Сохраните управляемое сопоставление индекса с длительностью, проверку и фокус с учётом trim, подтверждение только локально, независимость состояния плана от темы и явный сброс. Не добавляйте в этот веб-пример возможности нативного устройства.
05

React Native Elements Источники и область применения дизайн-системы

Фактические компоненты RNEUI 5.0.0, отображаемые через React Native Web. Исходное содержимое плана OpenDesign и его состояние; поведение нативного устройства, таймера или уведомлений не заявляется.