将 React 应用程序转换为 React Natural 的最快方法是什么?

这可能是一个幼稚的问题,但我找不到太多关于这个话题的信息。 我有一个功能齐全的 response-redux 应用程序,现在我想把它移植到 iOS 和 Android 上。我不需要使用任何本地功能,如 GPS 或相机等。理论上,我只是想做一个 webview,运行现有的 React 应用程序,然后调整它,直到它看起来更像样。 我的第一个尝试是简单地使用当前的 jsbundle 文件,并将其作为 jsCodeLocation 粘贴到 Appgenerate 中。这意料之中地导致了各种各样的错误,比如没有定义“窗口”。

我想我的问题是: 人们通常如何管理他们的本地和非本地代码库?它们是完全独立的,还是有办法回收大部分代码?

121842 次浏览

They're usually pretty separate, partly because your render target is different (i.e. no divs) and partly because of things like window not being available. It's possible to reuse code between web and native apps, but only if you're very careful about it.

From the react native release blog post:

It's worth noting that we're not chasing “write once, run anywhere.” Different platforms have different looks, feels, and capabilities, and as such, we should still be developing discrete apps for each platform

Some of the reusable things are styles:

var style = {
box: {height: 30, width: 30, padding: 10, ect...}
}

Logic such as state :

constructor(props){
super(props);


this.state= {text: "hi"};
}

the state can be shared between navite and dom like so

<View>
<Text>this.state.text</Text>
</View>

dom looks like this

<div>this.state.text</div>

You can even share functions but you have to be careful like it was stated above, as long as you're not directly invoking any dom or refs in your logic.

onClick(){
this.setState({text: "good bye"});
}

WebViews and React-native are two completely separate concepts. Either you want to go with the former (than you can actually use your application without much hassle), or with the latter. In that case, you could probably re-use some of the business logic, however most of the rendering would have to be rewritten.

React native is learn once, write anywhere, not learn once, write once :)

You cannot just use your whole code into the react native application. First and foremost, you have to follow the react native architecture and then develop your UI using react native components. https://facebook.github.io/react-native/docs/getting-started.html You'll get most of the help here.

There is another option also, you can just create a new react-native project and use webview in it and display your whole website there. https://facebook.github.io/react-native/docs/webview.html

As others have mentioned there's no quick way to convert react to react-native.

A possible alternative if you want your react app to run on a mobile device without rewriting your codebase is to use Cordova. For fun I ported a react-web app into a mobile app using Cordova in just a few minutes. There are some drawbacks to this method, but the benefit is that you can have a working mobile app in very little time.

Below are the steps if anyone is interested in a Cordova workaround alternative:

REACT SETUP (done in command line)

>1. npx create-react-app my-app
>2. cd my-app
>3. npm start

DEPLOY TO STATIC:

>1. Update your package.json file from your my-app directory to add "homepage":"." (see below)


"name": "my-app",
"version": "0.1.0",
"private": true,
"homepage":".",
"dependencies": {
>2. Build (in command line) npm run build

CORDOVA INTEGRATION (in command line)

>1.  cd ../ (change to wherever you want the project created, don't do this inside your existing react app folder)
>2.  npm install -g cordova (only if you already don't have Cordova installed)
>3.  cordova create MyApp
>4.  cd MyApp
>5.  cordova platform add ios //or android or browser

ADD A COUPLE STEPS FOR INCLUDING YOUR REACT PROJECT

>1. Open your Cordova MyApp www folder, delete all files and folders in it except for the 'js' folder
>2. Back in your react build folder update the index file to add two cordova scripts:
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
>3. copy all your files from the react build folder into the Cordova www folder (replacing everything except the js folder)

BUILD REACT-CORDOVA APP (in command line, inside your Cordova project)

>1. cordova build ios //or android or browser

TEST OR DEPLOY TO STORE ETC.

>1. Use xcode to open open your react-cordova .xcodeproject, this can be found in the MyApp/Platforms/ios/
>2. Select your simulator and run.  Enjoy your new mobile app!

TWEAK There are some minor tweaks you'll need to do (like remove the tap delay...etc) -I think this is why people think Cordova apps are slow, but it's an easy fix...

You have to refer the react native structure to actually understand how to convert your react app to your react native app.

To start from scratch I would suggest: https://reactnative.dev/docs/getting-started

For those who searching for a way to code once with react-native and export for Web, Android, and IOS, I suggest Expo. It suggests building for the web just with this command expo build:web.
Here is the full document

And about Webview that you have mentioned, I had made projects for Web and then use Webview to make mobile application of them, but it should be fully responsive and SPA to act as a real application when navigating between pages.
My own examples are:
Web: Mehrg.com Android: Home Design App
And another example is vitrinom

Updating an answer for 2022: Ionic (although this tech came about in [2013])(https://en.wikipedia.org/wiki/Ionic_(mobile_app_framework))

You can use Ionic! I am planning on using it for a few of my bootstrapped projects where I would like to prove concept first before doing a full on Native build.

Some pros of Ionic:

  • Support for React, Angular, Vue
  • fast to build and deploy to both iOS and Android
  • can be built using browser based technologies i.e. traditional React development
  • JS is all you need (I suppose HTML, CSS, etc too)
  • plugins for mobile device features such as camera, fingerprint, NFC, geoloc, push notifications, deep links, etc

Cons:

  • Debugging is hard
  • Error messages are vague, which makes Debugging harder
  • You need to go through the app on your device in order to debug device specific issues. But this would be necessary for native builds anyways.
  • Sometimes builds just crash!

My advice with technologies such as Ionic and Cordova (mentioned by @Paul Schorey) is tread with caution when using these tools live for real users. It is probably best to have plans to go native as soon as you are able to, have the resources, or have the users that necessitates migration.