[教学] 制作伪react-native app - WebView

楼主: zxvc (众生都是未来佛)   2016-08-30 20:22:18
最近在学react跟react-native发现:
react可以用来写web apps。
react-native可以用来写Android、iOS、甚至Win 10 apps。
但两者的UI components是不能直接交换使用的囧
这样好像就不能写一次JS code,直接输出三种apps: web, Android, iOS。
后来发现react-native有提供WebView component,
它相当于在app内建一个浏览器,可以读取HTML, CSS, JS,
就可以用来读取react web app bundle!
不过还是强调,
WebView这种作法并不像是使用react-native UI components有native的效能,
我称之"伪"react-native apps。
它的好处是可以偷懒:写好一个react web app,
不用改写UI成为react-native UI,就能转换成Android, iOS apps。
或许对转换一些小web apps还颇实用。用途请自行取舍。
以下步骤在教如何把react web app转成伪react-native apps:
(在此假设你的OS是Linux、
react-native Android开发环境已照Ref. [1]建立)
# 安装react与react-native apps生成工具:
npm install -g create-react-app react-native
# 建立react app:
create-react-app myapp
cd myapp
# 修改bundle里URLs的启始路径[2],加入下面这行至package.json:
"homepage": "."
# 此步可考虑执行npm start验证你的web app是否正常。
# 产生bundle:
npm run build
# 会输出到build资料夹。
cd ..
# 建立react-native app:
react-native init AwesomeProject
cd AwesomeProject
# 产生assets资料夹:
mkdir -p android/app/src/main/assets
# react-native会把assets资料夹的档案一并包入bundle。
# 把react的bundle所在资料夹build,连结到assets底下:
cd ..
ln -s myapp/build AwesomeProject/android/app/src/main/assets
cd AwesomeProject
# 修改index.android.js的render,使用WebView读build/index.html:
<View>
<WebView style={{ backgroundColor: "blue", height: 200 }}
source={{uri: 'file:///android_asset/build/index.html'}}
scalesPageToFit={true} />
</View>
# 参照assets的uri要以"file:///android_asset"开头[3]。
# 启动Android emulator:
android avd
# 执行react-native app:
react-native run-android
# 观查emulator有没有启动Android app,画面应该跟web app一样。
Refs:
[1]
https://facebook.github.io/react-native/docs/getting-started.html#content
[2]
https://stackoverflow.com/questions/38565538/create-react-app-css-and-js-path/
[3] https://github.com/facebook/react-native/issues/505
作者: GoalBased (Artificail Intelligence)   2016-08-30 23:39:00
看了前半段..就是webview的意思吗..?
作者: wuboy (光阴的故事)   2016-08-31 01:38:00
就是webview而已 只是不想学其他语言时偷懒的做法...
楼主: zxvc (众生都是未来佛)   2016-08-31 07:04:00
w大,应该说"不想学其它react-native APIs或"不想重写UIs"比较正确一点。react-native APIs本身也是react components,也是用JSX/JS语言去写的。G大,是用WebView。但这bundle的步骤还颇不直觉的,如[2][3]
作者: Qiqi (泼泼)   2016-08-31 08:11:00
直接用ionic实际
作者: travelerX   2016-09-01 18:21:00
React 家族的价值在一种技术,各平台可用。而非一次开发,各平台都用

Links booklink

Contact Us: admin [ a t ] ucptt.com