💻
React Native
  • 👨‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Налаштування робочого середовища
      • Вступ
      • Налаштування середовища розробки
      • Перший проект
      • Налаштування емуляції Android (Android Studio + JDK)
      • Налаштування емуляції Iphone (Xcode)
      • Запуск проекту на віртуальних пристроях
      • Expo Snack
    • 2️⃣Верстка і стилізація
      • Функціональні та класові компоненти
      • Базові компоненти
      • Фундаментальні концепції React в React Native
      • Стилізація компонентів
      • Стилізація залежно від платформи
      • Кольори
      • Зображення
      • Векторна графіка
      • Розташування компонентів
      • Робота зі шрифтами
      • Колекції даних
      • Дебаг застосунку
    • 3️⃣Обробка подій
      • Обробка подій
      • Обробка текстових інпутів
      • Інпути в фокусі
      • Форма для збору даних
      • Робота з клавіатурою
      • Перехоплення подій
    • 4️⃣Навігація
      • Підключення навігації
      • Перемикання екранів
      • Передача параметрів між екранами
      • Хедер екрану
      • Вкладена навігація
      • Нижня навігація
    • 5️⃣Нативні компоненти
      • Камера
      • Мапи
      • Геолокація
    • 👷Практика
      • 1️⃣Завдання 1
      • 2️⃣Завдання 2
      • 3️⃣Завдання 3
      • 4️⃣Завдання 4
      • 5️⃣Завдання 5
      • 6️⃣Завдання 6
      • 7️⃣Завдання 7
    • Додаткові покликання
  • Про мене
    • Про мене
Powered by GitBook
On this page
  1. Теорія
  2. Верстка і стилізація

Стилізація компонентів

В React Native для стилізації компонентів використовується JavaScript. Усі основні компоненти підтримують prop style. Стилі пишуть у форматі ключ: значення. Якщо відповідник стилю в CSS складається із двох та більше слів, то використовують формат написання camelCase. Наприклад backgroundColor замість background-color. Числові значення передають без жодних одиниць вимірювання. Всі інші значення - це рядковий тип даних.

<Text
  style={{
    margin: 10,
    fontSize: 42,
    backgroundColor: "#F6F6F6",
    color: "red",
  }}
>
  Hello
</Text>

У React Native немає окремого формату даних для стилів (немає аналога CSS в web), немає медіазапитів та псевдоселекторів. Написання інлайн-стилів - це стандартний патерн стилізації компонентів.

У prop style можна передати масив обʼєктів стилів. Вони будуть зібрані і передані компоненту автоматично в одному збірному обʼєкті. Причому, якщо в наступному обʼєкті стилю буде дублюватися стиль, то він перебʼє стиль попереднього обʼєкта. Застосується останній варіант.

<Text
  style={[
    { color: "red", fontWeight: "bold", fontSize: 30 },
    { color: "blue", backgroundColor: "yellow" },
  ]}
>
  Hello
</Text>

В даному випадку результуючим стилем буде: { color: "blue", fontWeight: "bold", fontSize: 30, backgroundColor: "yellow" }

StyleSheet

Використовувати наведену вище стилізацію компонентів недоцільно через неможливість повторного використання стилів для однотипних компонентів. Для оптимізації стилізації в React Native існує спеціальний клас StyleSheet.

Щоб його застосувати, створюють змінну (зазвичай її називають styles) яка є результатом виклику функції StyleSheet.create(). У неї передають обʼєкт у вигляді {ключ: об’єкт стилів}.

import { StyleSheet, Text, View } from "react-native";

export default function App() {
  return (
    <View style={styles.container}>
      <Text style={styles.textBase}>Hello</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center",
  },
  textBase: { color: "blue", fontWeight: "bold", fontSize: 30 },
  textUpdated: { color: "blue", backgroundColor: "yellow" },
});

Тут так само можна комбінувати стилі компонента, як було раніше зазначено:

<Text style={[styles.textBase, styles.textUpdated]}>Hello</Text>

StyleSheet не є обов’язковим паттерном. Для стилізації компонентів можна використовувати і просто об’єкти зі стилями. Але перевага використання StyleSheet в тому, що редактор коду буде підказувати назви стилів і їх можливі значення.

Стилізацію компонентів проекту можна організувати по аналогії підключення таблиці стилів CSS в HTML. Стилі всього застосунку винести в окремий файл styles.js, підключати його і використовувати в будь-якому компоненті застосунку.

App.js
import { Text, View } from "react-native";

import { styles } from "./styles";

export default function App() {
  return (
    <View style={styles.container}>
      <Text style={[styles.textBase, styles.textUpdated]}>Hello</Text>
    </View>
  );
}
styles.js
import { StyleSheet } from "react-native";

export const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center",
  },
  textBase: { color: "blue", fontWeight: "bold", fontSize: 30 },
  textUpdated: { color: "blue", backgroundColor: "yellow" },
});

Можна також створювати файл таблиці стилів персональний для кожного компоненту окремо. Утім це радше заплутає. Адже стиль компонентів повторюється і нема потреби ускладнювати структуру проекту.

Деякі опції стилізації виконуються завдяки props компонентів. Докладніше опис по пропсам компонентів можна дізнатися в офіційній документації.

Єдиного стандарту оформлення стилізації скрінів і компонентів немає. Можна прописувати StyleSheet внизу файлу, можна виносити в окремий файл styles і інпортувати.

Для себе знайшов поки що найкращий варіант: створити пару файлів Screen.js та stylesScreen.js і помістити їх для кожного скріна чи компонента в папку за назвою скріна чи компонента Screen.

Переваги такого підходу від інших: стилі лежать в окремому файлі (відділення логіки і стилізації), але якщо всі стилі проекту виносити в окремий файл, то цей файл стає дуже довгим.

Тому це щось схоже за аналогією з css-модулями чи стилізованими компонентами в React.

Посилання на офіційну документацію:

PreviousФундаментальні концепції React в React NativeNextСтилізація залежно від платформи

Last updated 1 year ago

📚
2️⃣
Спробувати цей приклад на Snack
Стилізація компонентів
Офіційна документація компонентів React Native