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.

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.
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.


