I recently started out with native development, coming from a web background with Vue and mostly React. The transition wasn’t as difficult as I expected. A lot of the concepts carry over, so I got comfortable quickly and jumped straight into building and maintaining existing apps.
As someone who leans heavily into design, one thing that stood out to me was styling. It felt familiar… but not completely. At first, I assumed styling in React Native was limited to StyleSheet. Turns out, that’s not the full picture.
Then I came across NativeWind, which is basically Tailwind for React Native, and it changed how I approached styling entirely.
In this article, I’ll walk through the different ways you can style a React Native app, with a bit more focus on NativeWind since it’s what I naturally gravitated toward.
1. The Default Way (StyleSheet)
This is the foundation. Every React Native project supports this out of the box.
Example
import { View, Text, StyleSheet } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<Text style={styles.title}>Hello World</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#fff',
},
title: "{"
fontSize: 20,
fontWeight: 'bold',
},
});
Why people use it
It’s simple, predictable, and performs well. No extra setup needed.
The downside
It starts to feel repetitive as your UI grows. Reusing styles across components isn’t always clean.
2. Inline Styling (Quick but Limited)
You can also define styles directly inside your components.
Example
<View style={{ padding: 20, backgroundColor: 'white' }}>
<Text style={{ fontSize: 18 }}>Hello World</Text>
</View>
When it works
- Quick prototyping
- Small components
Where it breaks
It gets messy fast. Hard to maintain, harder to reuse.
3. Utility-First Styling with NativeWind
This is where things get interesting.
Instead of writing styles in objects, you use utility classes directly on your components, similar to Tailwind on the web.
Example
import { View, Text } from 'react-native';
export default function App() {
return (
<View className="flex-1 justify-center items-center bg-white">
<Text className="text-lg font-bold">Hello World</Text>
</View>
);
}
Why it stands out
- Very fast to write
- Less switching between files
- Encourages consistency in spacing, sizing, and layout
Real advantage
If you're coming from web development, this feels natural. You already know how to think in utility classes, so you move faster almost immediately.
Tradeoffs
- Long class strings
- Requires setup
- Can look noisy if not structured well
Still, for many developers (myself included), the speed and familiarity make it worth it.
4. Component-Based Styling with Styled Components
This approach lets you create styled components with styles attached to them.
Example
import styled from 'styled-components/native';
const Container = styled.View`
flex: 1;
justify-content: center;
align-items: center;
background-color: white;
`;
const Title = styled.Text`
font-size: 20px;
font-weight: bold;
`;
export default function App() {
return (
<Container>
<Title>Hello World</Title>
</Container>
);
}
Why people like it
- Clean separation
- Reusable components
- Easy to scale
Downsides
- Slight overhead
- Can feel heavy for simple apps
5. UI Libraries (Pre-styled Components)
Sometimes you don’t want to style everything from scratch.
Libraries like React Native Paper or NativeBase give you ready-made components.
Example
import { Button } from 'react-native-paper';
<Button mode="contained">Click Me</Button>
Why use them
- Faster development
- Consistent design out of the box
Tradeoffs
- Less control over design
- Can feel generic if not customized
6. Platform-Specific Styling
React Native also allows you to style differently for iOS and Android when needed.
Example
import { Platform, StyleSheet } from 'react-native';
const styles = StyleSheet.create({
text: {
fontSize: Platform.OS === 'ios' ? 20 : 18,
},
});
This is useful when platform differences actually matter.
So… What Should You Use?
It depends on your workflow.
- Want stability and simplicity → StyleSheet
- Want speed and less repetition → NativeWind
- Want structured, reusable components → Styled Components
- Want ready-made UI → Component libraries
Before you sleep...
There isn’t a single “correct” way to style a React Native app. Most real-world apps mix approaches.
For me, NativeWind made things click faster because it felt like home coming from the web. But that doesn’t make it the best for everyone.
Pick what helps you move fast and stay organized.
Disclaimer
This article is not sponsored by NativeWind.
I just like things that let me write less code and still feel like I know what I’m doing.
Top comments (0)