React to React Native: What Nobody Warns You About (2026)
I've been building with React for two years. I assumed React Native would feel like React with a different stylesheet. It doesn't. Here's what actually surprised me.
I've been building with React for two years. Node.js on the backend, React and Next.js on the front. When I decided to learn React Native, I assumed it would feel like React with a different stylesheet.
It doesn't.
Some of it does. The mental model — components, hooks, state, props — transfers completely. The first time I got a component rendering on my phone, it felt weirdly fast to get there. JSX is JSX. useState is useState. If you know React, you're not starting from zero.
But then you try to build something real.
The styling system will trip you up
On the web, CSS has decades of layout primitives. Flexbox, grid, percentages, viewport units. You reach for what fits.
React Native uses StyleSheet objects with a subset of CSS. Flexbox is the default layout — and it's column-direction by default, not row. That sounds minor until you've spent twenty minutes wondering why your horizontal layout is vertical.
There's no display: grid. No position: fixed (you use position: absolute differently). No vh/vw units — you use Dimensions.get('window') or the useWindowDimensions hook.
I kept reaching for things that don't exist. The muscle memory from web CSS fights you for the first week.
The navigation mental model is different
On the web, navigation is URLs. React Router, Next.js — they map URLs to components. Clean and familiar.
React Native navigation is stack-based. React Navigation is the most common library, and it works well, but the concepts are different. You're managing a stack of screens, not a tree of routes. Back button behaviour, header configuration, deep linking — all of it needs to be explicitly wired up.
The first time I needed a modal that worked correctly on both iOS and Android, I spent an afternoon on it. On the web that's a position: fixed div and a backdrop.
Debugging is harder
On the web, you open DevTools. You can inspect any element, see computed styles, step through network requests, profile renders in real time.
React Native debugging is... more involved. Flipper was the standard tool for a while, but it has reliability issues. Metro bundler errors can be cryptic. When something goes wrong on the native side — a third-party module, a permission issue, a device-specific crash — the error messages don't always point you in the right direction.
I've started logging more aggressively than I ever did on the web. Old habit from backend work that turned out to be useful here.
iOS and Android behave differently
This one I knew intellectually. I didn't appreciate it until I hit it.
Shadow styles work differently across platforms. shadow* props apply on iOS. Android uses elevation. You end up with platform checks in your styles, which feels messy but is just reality.
Keyboard behaviour is different. Safe area handling (notches, home indicators) is different. Sometimes a layout that looks perfect on iOS simulator looks broken on an Android device.
The Platform.OS check becomes a normal part of writing components. Coming from the web where progressive enhancement handles most browser differences, it takes some getting used to.
What I actually like
Animations. React Native's Animated API and the react-native-reanimated library are genuinely good. Smooth 60fps animations that run on the UI thread, separate from the JS thread. On the web, getting smooth animations right is harder than it should be. Here the primitives are built for it.
Running on a real device. There's something satisfying about building a thing and immediately seeing it on your phone. The feedback loop feels different from web development — more tactile somehow.
The React knowledge carries further than I expected once you get past the styling adjustment. Custom hooks, context, performance patterns — it all applies.
Where I am now
Still learning. I can build screens, navigate between them, fetch data, handle forms. Animations are starting to feel less foreign. I haven't shipped anything in production yet with React Native, but that's the goal.
If you're coming from React and considering the jump — it's worth it. Just don't expect it to feel the same. Give yourself a week to unlearn some web habits, and it starts to click.
I'm writing about the journey as I go. If you've made this transition and have things you wish someone had told you, I'd genuinely like to hear them.
Have questions about the implementation? Drop a message