Remix + React Native Web
Experiments integrating React Native Web (RNW) into a Remix app.
Related discussion: Usage with React Native (+ Web)
Branches
- with-modded-remix
(open in CodeSandbox)
- Uses a modded version of @remix-run/dev to enable compatibility with community packages that utilize react-native-web
- no-modded-remix
(open in CodeSandbox)
- Can use react-native-web, but unable to use most other packages in the react-native ecosystem
Monorepo examples with Expo
These branches use lerna/yarn workspaces to enable remix and expo to utilize a shared UI package. To get these branches up and running:
yarn && yarn bootstrap
- Run remix:
cd packages/app-remix && yarn dev
- Run expo:
cd packages/app-remix && yarn start
- or
yarn ios
,yarn android
, etc (see Expo docs for details)
- or
- monorepo-expo
- Uses latest official expo release
- monorepo-expo-router
- Uses expo-router (docs), which adds filesystem-based routing to expo. Note that expo-router is currently in an early beta/RFC phase
Branches encountering hydration errors
These branches were created to investigate mysterious hydration errors encountered when trying to use react-native-web in a Remix app.
Investigation has seemed to isolate all of these issues to the StyleSheet
implementation in react-native-web
,
but it is unclear what in that implementation would cause errors specifically
just in Remix apps. See https://github.com/mikeylemmon/cra-rnw-ssr for an
express-based app that does not encounter the errors.
More discussion here: Usage with React Native (+ Web) [comment #3777340]
- hydr8-err-minimal
(open in CodeSandbox)
- A "Just the basics" Remix app with the sole addition of a single
react-native-web
View
. - Encounters a hydration error ("Expected... matching <meta> in <head>")
- A "Just the basics" Remix app with the sole addition of a single
react-native-web
- hydr8-err-mod-remix (open in CodeSandbox)
- Uses a modded version of @remix-run/dev to enable compatibility with community packages that utilize react-native-web
- Encounters the same hydration error as the hydr8-err-minimal branch
- hydr8-err-horus
(open in CodeSandbox)
- Attempt to get react-native-web SSR styles working by roughly following sections 2. and 3. of Horus Lugo's blog post How to Setup React Native Web in a Remix project
- Encounters a different hydration error, reported by Horus:
necolas/react-native-web#2326
- It appears that issue was closed based on a misreading of Horus's code
- hydr8-err-tyrauber
(open in CodeSandbox)
- This branch is very similar to the hydr8-err-horus branch, but uses Ty Rauber's code for server-side RNW styles instead of Horus Lugo's (diff). The hydration errors are the same.
Welcome to Remix!
Development
From your terminal:
npm run dev
This starts your app in development mode, rebuilding assets on file changes.
Deployment
First, build your app for production:
npm run build
Then run the app in production mode:
npm start
Now you'll need to pick a host to deploy it to.
DIY
If you're familiar with deploying node applications, the built-in Remix app server is production-ready.
Make sure to deploy the output of remix build
build/
public/build/
Using a Template
When you ran npx create-remix@latest
there were a few choices for hosting. You can run that again to create a new project, then copy over your app/
folder to the new project that's pre-configured for your target server.
cd ..
# create a new project, and pick a pre-configured host
npx create-remix@latest
cd my-new-remix-app
# remove the new project's app (not the old one!)
rm -rf app
# copy your app over
cp -R ../my-old-remix-app/app app