Hubert
10 min
13 marca, 2025

NativeWind czyli jak używać Tailwind CSS w React Native?

W React Native tradycyjne metody, jak StyleSheet czy Styled Components, często prowadzą do nadmiernie rozbudowanego kodu i trudności w zarządzaniu stylami. Tailwind CSS, popularny w aplikacjach webowych, upraszcza ten proces dzięki podejściu utility-first, oferując czytelność i elastyczność. Dzięki bibliotece NativeWind można korzystać z Tailwind CSS również w React Native. W artykule wyjaśniamy, jak skonfigurować NativeWind i efektywnie stylizować aplikacje mobilne, przyspieszając proces budowy interfejsu.

Czytaj więcej
NativeWind czyli jak używać Tailwind CSS w React Native?

Co to jest NativeWind?

NativeWind to biblioteka stylizacji dla React Native, która umożliwia korzystanie z Tailwind CSS w aplikacjach mobilnych. Działa jako interpreter klas Tailwind, konwertując je na natywne style React Native, co pozwala na szybsze i bardziej intuicyjne stylowanie komponentów. Dzięki integracji z Tailwind CSS, NativeWind zapewnia spójność stylu między platformami oraz wysoką wydajność, eliminując konieczność ręcznego definiowania stylów w obiektach StyleSheet.

Co to jest Tailwind CSS?

Tailwind CSS to framework CSS typu utility-first, który dostarcza zestaw gotowych klas, takich jak flex, pt-4 czy text-center, umożliwiających szybkie stylizowanie interfejsów bez pisania niestandardowego CSS. Pozwala na bezpośrednie definiowanie wyglądu w HTML lub JSX, wspiera podejście mobile-first i responsywny design. Dzięki temu ułatwia tworzenie spójnych, skalowalnych projektów i jest szczególnie popularny wśród programistów webowych i mobilnych, którzy chcą szybko prototypować oraz budować interfejsy użytkownika.

Jak używać NativeWind w React Native? – krok po kroku

Krok 1. Skonfiguruj nowy projekt w React Native

Zanim zaczniemy używać Tailwind CSS w React Native, musimy przygotować projekt. Istnieją dwie główne metody tworzenia aplikacji React Native: za pomocą Expo lub przy użyciu React Native CLI. Sprawdź szczegółowe informacje jak rozpocząć projekt w React Native?

Opcja 1: React Native CLI (pełna kontrola)

Jeśli chcesz mieć dostęp do natywnych modułów, użyj React Native CLI:

npx react-native init MyApp

cd MyApp

npx react-native run-android  # dla Androida

npx react-native run-ios      # dla iOS (tylko na macOS)

Opcja 2: Expo (prostsze i szybsze)

Expo to narzędzie ułatwiające tworzenie aplikacji React Native bez potrzeby konfigurowania środowiska natywnego. Jeśli jeszcze go nie masz, zainstaluj Expo CLI:

npm install -g expo-cli

Następnie utwórz i uruchom nowy projekt:

npx create-expo-app my-app

cd my-app

npx expo start

Aplikację można testować na urządzeniu mobilnym za pomocą Expo Go.

Krok 2. Zainstaluj NativeWind

Aby dodać NativeWind  do projektu, wykonaj następującą komendę:

npm install nativewind

NativeWind wymaga również konfiguracji Babel, aby poprawnie interpretować klasy Tailwind CSS. Otwórz plik babel.config.js i dodaj wtyczkę NativeWind:

module.exports = function (api) {

  api.cache(true);

  return {

    presets: ["babel-preset-expo"],

    plugins: ["nativewind/babel"],

  };

};

Dzięki tej konfiguracji NativeWind będzie mógł dynamicznie przetwarzać klasy Tailwind CSS w kodzie React Native.

Potrzebujesz wsparcia w projektach mobilnych?
Potrzebujesz wsparcia w projektach mobilnych?
Potrzebujesz wsparcia w projektach mobilnych?
Skontaktuj się z nami!

Krok 3. Konfiguracja Tailwind CSS

Kolejnym krokiem jest instalacja Tailwind CSS i utworzenie pliku konfiguracyjnego:

npm install tailwindcss

npx tailwindcss init

Po wykonaniu tej komendy w katalogu projektu pojawi się plik tailwind.config.js. Otwórz go i dostosuj konfigurację, dodając ścieżki do plików komponentów React Native:

/** @type {import('tailwindcss').Config} */

module.exports = {

  content: ["./App.{js,jsx,ts,tsx}", "./components/**/*.{js,jsx,ts,tsx}"],

  theme: {

    extend: {},

  },

  plugins: [],

};

Dzięki temu Tailwind CSS będzie wiedział, które pliki analizować i gdzie stosować swoje klasy.

Krok 4. Konfiguracja Babela dla NativeWind

Aby NativeWind poprawnie interpretował klasy Tailwind CSS w React Native, konieczna jest konfiguracja Babela, który umożliwia przekształcanie kodu JavaScript przed jego wykonaniem.

Najpierw upewnij się, że masz już zainstalowany NativeWind w projekcie.Następnie otwórz plik babel.config.js znajdujący się w katalogu głównym projektu i dodaj do niego wtyczkę NativeWind:

module.exports = function (api) {

  api.cache(true);

  return {

    presets: ["babel-preset-expo"],

    plugins: ["nativewind/babel"],

  };

};

Co robi ta konfiguracja?

  • api.cache(true) – optymalizuje działanie Babela poprzez pamięć podręczną.
  • presets: [„babel-preset-expo”] – zapewnia wsparcie dla kodu w Expo (jeśli go używasz).
  • plugins: [„nativewind/babel”] – umożliwia interpretację klas Tailwind CSS w React Native.

Krok 5. Tworzenie i stylowanie komponentów za pomocą NativeWind

Po poprawnej instalacji NativeWind oraz konfiguracji Tailwind CSS możemy przejść do praktycznego zastosowania. W tym rozdziale przedstawimy, jak korzystać z klas Tailwind CSS w komponentach React Native, aby szybko i efektywnie stylować interfejs użytkownika.

Podstawowe użycie klas Tailwind w React Native

Dzięki NativeWind możemy stosować klasy Tailwind CSS bezpośrednio w atrybucie className komponentów React Native. Oto prosty przykład:

import { View, Text } from 'react-native';

export default function App() {

  return (

    <View className="flex-1 justify-center items-center bg-blue-500">

      <Text className="text-white text-lg font-bold">Witaj w NativeWind!</Text>

    </View>

  );

}

Co się tutaj dzieje?

  • flex-1 – ustawia komponent nadrzędny na pełną wysokość ekranu.
  • justify-center – wyrównuje elementy w pionie na środku.
  • items-center – wyrównuje elementy w poziomie na środku.
  • bg-blue-500 – ustawia kolor tła na niebieski.
  • text-white – zmienia kolor tekstu na biały.
  • text-lg – ustawia większy rozmiar czcionki.
  • font-bold – pogrubia tekst.

Dzięki temu kod jest czytelniejszy i bardziej zwięzły, a cały styl jest zdefiniowany w jednym miejscu.

Stylowanie warunkowe

NativeWind pozwala na dynamiczne zmienianie stylów na podstawie stanu komponentu. Możemy użyć operatora warunkowego do nadawania różnych klas w zależności od wartości zmiennej:

import { useState } from 'react';
import { View, Text, TouchableOpacity } from 'react-native';

export default function App() {
  const [darkMode, setDarkMode] = useState(false);

  return (
    <View className={`flex-1 justify-center items-center ${darkMode ? 'bg-gray-900' : 'bg-white'}`}>
      <Text className={`text-lg ${darkMode ? 'text-white' : 'text-black'}`}>
        {darkMode ? 'Tryb ciemny' : 'Tryb jasny'}
      </Text>
      <TouchableOpacity 
        className="mt-4 px-4 py-2 bg-blue-500 rounded-lg"
        onPress={() => setDarkMode(!darkMode)}
      >
        <Text className="text-white font-bold">Zmień tryb</Text>
      </TouchableOpacity>
    </View>
  );
}

Jak to działa?

  • Używamy useState, aby śledzić stan trybu ciemnego.
  • Tło View zmienia kolor w zależności od wartości darkMode.
  • Tekst Text zmienia kolor na biały w trybie ciemnym i czarny w trybie jasnym.
  • TouchableOpacity działa jako przycisk do zmiany trybu.

Dzięki NativeWind możemy dynamicznie zarządzać stylami w prosty i przejrzysty sposób.

Obsługa responsywności

NativeWind obsługuje wbudowane klasy responsywne, co pozwala na dostosowanie interfejsu do różnych rozmiarów ekranów:

<View className="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 bg-green-500 p-4">

  <Text className="text-white text-center">Przykładowy blok</Text>

</View>

Dzięki temu komponenty automatycznie dostosowują się do różnych rozdzielczości ekranów.

Zalety używania NativeWind w React Native

Wykorzystanie NativeWind w React Native niesie za sobą szereg korzyści, które czynią stylowanie prostszym i bardziej intuicyjnym:

Spójność stylowania na różnych platformach

Jednym z największych wyzwań w stylowaniu aplikacji mobilnych jest zapewnienie, że wygląd pozostaje spójny na różnych urządzeniach i systemach operacyjnych. Tailwind CSS w połączeniu z NativeWind pozwala na łatwiejsze zarządzanie stylem zarówno na Androidzie, jak i iOS, bez konieczności stosowania osobnych rozwiązań dla każdej platformy.

Szybkie tworzenie interfejsu użytkownika

Dzięki podejściu utility-first, nie trzeba pisać długich stylów w plikach JavaScript. Zamiast tego można używać klas Tailwind CSS bezpośrednio w komponentach, co znacząco przyspiesza proces budowania interfejsu użytkownika.

Przykład tradycyjnego stylowania w React Native:

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

export default function App() {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Witaj w aplikacji!</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#3498db',
  },
  text: {
    color: '#ffffff',
    fontSize: 18,
  },
});

Przykład z NativeWind i Tailwind CSS:

jsx

import { View, Text } from 'react-native';

export default function App() {
  return (
    <View className="flex-1 justify-center items-center bg-blue-500">
      <Text className="text-white text-lg">Witaj w aplikacji!</Text>
    </View>
  );
}

Lepsza organizacja kodu i jego czytelność

Dzięki zastosowaniu klas użytkowych w komponentach React Native, nie musimy tworzyć długich obiektów StyleSheet, co ułatwia zarządzanie stylami. Dzięki temu kod jest bardziej zwięzły, a zmiany w wyglądzie komponentów można wprowadzać szybciej.

Łatwa implementacja responsywności

Tailwind CSS oferuje wbudowane narzędzia do tworzenia interfejsów responsywnych. Dzięki temu możemy stosować klasy sm, md, lg i inne, aby dostosować wygląd komponentów do różnych rozmiarów ekranów.

Obsługa trybu ciemnego

NativeWind pozwala na łatwą implementację trybu ciemnego, co jest coraz bardziej popularnym wymaganiem w nowoczesnych aplikacjach mobilnych. Wystarczy dodać odpowiednie klasy, np.:

<Text className="text-black dark:text-white">Tryb jasny i ciemny</Text>

Dzięki temu aplikacja automatycznie dostosuje kolory do preferencji użytkownika.

Rozwiązywanie najczęstszych problemów

Podczas pracy z NativeWind i Tailwind CSS w React Native, możesz napotkać pewne błędy. Poniżej znajdziesz rozwiązania dla najczęstszych problemów oraz wskazówki, jak sobie z nimi radzić.

1. Klasy Tailwind CSS nie działają

Problem: Po dodaniu klas Tailwind CSS komponenty nie zmieniają wyglądu.
Rozwiązanie:
–  sprawdź, czy poprawnie skonfigurowałeś plik tailwind.config.js i czy zawiera odpowiednie ścieżki
– upewnij się, że dodałeś wtyczkę NativeWind w babel.config.js:
– zrestartuj serwer deweloperski

2. Aplikacja nie rozpoznaje className

Problem: React Native zgłasza błąd, że className nie jest poprawnym atrybutem.
Rozwiązanie: 
– sprawdź, czy na pewno zainstalowałeś NativeWind
– upewnij się, że używasz Expo w wersji SDK 48 lub nowszej (w przypadku starszych wersji mogą występować problemy)
– jeżeli problem nadal występuje, użyj styled zamiast className:

3. Tailwind nie działa na Androidzie

Problem: Aplikacja działa poprawnie na iOS, ale na Androidzie klasy Tailwind nie są stosowane.

Rozwiązanie:
– sprawdź, czy Twoja aplikacja korzysta z najnowszej wersji React Native i Expo.
– sprawdź logi w terminalu, aby znaleźć ewentualne błędy związane z renderowaniem.
– wykonaj pełne wyczyszczenie cache i uruchom aplikację ponownie

4. Nie działa tryb ciemny (dark:)

Problem: Klasy Tailwind odpowiedzialne za tryb ciemny (dark:) nie są stosowane.

Rozwiązanie:
– upewnij się, że system operacyjny ma włączony tryb ciemny.
– jeśli chcesz wymusić tryb ciemny, w tailwind.config.js dodaj opcję darkMode: „class”:
– możesz ręcznie zmieniać tryb ciemny w kodzie:

FAQ – Najczęściej zadawane pytania

Czy NativeWind jest stabilne?

Tak, NativeWind jest stabilnym rozwiązaniem i jest aktywnie rozwijane przez społeczność. Jest szeroko stosowane w projektach produkcyjnych React Native.

Jak używać NativeWind w Expo?

Wystarczy zainstalować NativeWind i Tailwind CSS w projekcie Expo za pomocą:

npm install nativewind tailwindcss

npx tailwindcss init

Następnie skonfigurować tailwind.config.js i dodać plugin NativeWind w babel.config.js.

Czy można używać Tailwind w React Native?
Tak, można używać Tailwind CSS w React Native dzięki bibliotece NativeWind, która interpretuje klasy Tailwind i konwertuje je na natywne style.

Czy NativeWind działa na Androidzie?
Tak, NativeWind działa zarówno na Androidzie, jak i iOS, ponieważ wykorzystuje natywne API React Native do renderowania stylów.

Jak korzystać z NativeWind?
Po instalacji NativeWind można używać klas Tailwind CSS bezpośrednio w atrybucie className komponentów React Native, np.:

<View className="bg-blue-500 p-4 rounded-lg">

  <Text className="text-white font-bold">Hello, NativeWind!</Text>

</View>

Czy można używać Tailwind w React?
Tak, Tailwind CSS jest natywnie przeznaczony dla aplikacji React i React Native. W przypadku aplikacji mobilnych konieczne jest użycie NativeWind, natomiast w aplikacjach webowych można stosować Tailwind bez dodatkowych bibliotek.

Powiązane artykuły
NativeWind czyli jak używać Tailwind CSS w React Native?
8 min
17 marca, 2025
Flutter - świetne narzędzie do tworzenia aplikacji na Androida oraz iOS
Flutter to innowacyjne narzędzie programistyczne od Google, które umożliwia szybkie i efektywne tworzenie aplikacji mobilnych...
Dowiedz się więcej
NativeWind czyli jak używać Tailwind CSS w React Native?
4 min
12 marca, 2025
Lynx – nowy gracz na rynku cross-platformowych frameworków mobilnych
Jednym z najnowszych narzędzi, które pojawiło się w ostatnim czasie i które zdobywa coraz większą...
Dowiedz się więcej
NativeWind czyli jak używać Tailwind CSS w React Native?
9 min
6 marca, 2025
Jak poprawić wydajność aplikacji React Native?
Optymalizacja wydajności aplikacji mobilnych ma ogromne znaczenie dla satysfakcji użytkowników oraz sukcesu produktu. Nawet drobne...
Dowiedz się więcej
Zobacz wszystkie
Odkryj więcej tematów