React Native三端同构
React Native三端同构,即iOS、Android、Web共用一套代码,已知React Native已经支持iOS、Android,所以只需要做支持Web的工作就行了。
如何同构
我们可以利用现有框架来实现,主要以下步骤
1、使用create-react-app 来创建React Web项目
2、安装react-native模块,这一步其实就具备Android、iOS的能力了
npm install react-native
3、使用react-native-web ,可以跟React Native一样的API,如React Native是如下引用的
import { Text } from "react-native"
react-native-web是如下引用的
import { Text } from "react-native-web"
然后用webpack的alias属性,将react-native模块导入改成react-native-web导入,如下所示
-
alias: {
-
'react-native': 'react-native-web'
-
},
具体接入
接入create-react-app
利用create-react-app创建Web项目,首先执行以下命令,安装create-react-app(要求npm 6 )
npm install -g create-react-app
执行以下命令创建React Web 项目
npm init react-app my-app
cd到my-app目录
cd my-app
执行以下命令,开放所有配置项
npm run eject
执行完,可以看到生成了config文件夹,我们后面步骤要修改webpack.config.js,目录如下
执行以下命令看服务是否正常
npm start
启动以下界面说明服务正常
接入React Native
执行以下命令
npm install react-native
在package.json,增加起React Native服务的命令,如下
-
"scripts": {
-
"debug-rn": "react-native start --reset-cache",
-
}
接入react-native-web
执行以下命令
npm install react-native-web
然后检查config/webpack.config.js,是否有以下配置,默认是有的
-
alias: {
-
// Support React Native Web
-
// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
-
'react-native': 'react-native-web'
-
},
这个是webpack的alias属性,可以将你的导入模块react-native,改为从react-native-web导入,如果你也引入阿里的antd,可以如下转换
-
alias: {
-
'@ant-design/react-native': 'antd-mobile'
-
}
修改工程
增加src/index.native.js文件,.native代表Andriod、iOS用的文件,如下所示
-
|-- src
-
|-- index.js web使用
-
|-- index.native.js Android、iOS使用
-
import React from 'react';
-
import {
-
AppRegistry,
-
StyleSheet,
-
Text,
-
View
-
} from 'react-native';
-
import App from './App';
-
-
-
AppRegistry.registerComponent(
-
'MyReactNativeApp', // MyReactNativeApp是注册模块,改成你自己的就行
-
() => App
-
);
修改src/App.js,代码如下
-
// In App.js in a new project
-
-
import React, { useState } from 'react';
-
import { View, Text, Button, Image,StyleSheet } from 'react-native';
-
-
function App() {
-
return (
-
<View >
-
<Text style={styles.hello}>文本一</Text>
-
<Text style={{fontSize: 40, backgroundColor: "#f00"}}>文本2</Text>
-
</View>
-
);
-
}
-
-
const styles = StyleSheet.create({
-
container: {
-
flex: 1,
-
justifyContent: 'center'
-
},
-
hello: {
-
fontSize: 20,
-
textAlign: 'center',
-
margin: 10,
-
}
-
});
-
-
export default App;
调试
执行npm run start,检查Web效果
执行npm run debug-rn,检查React Native
如下,说明配置完成
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhbebe
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13