时间:2021-05-19
前言
RN经过一段时间发展,已经有充分数量的人尝试过了,就我身边就有几批,褒贬也不一:
① 做UI快
② 还是有很多限制,不如原生Native
③ 入门简单,能让前端快速开发App
④ iOS&Android大部分代码通用
⑤ code-push能做热更新,但是用不好依旧坑
......
在得到一些信息后,可以看出,要用RN高效率的做出比较不错的App是有可能的,单看投入度与最初设计是否合理,而且现在关于React Native的各种文档是相当丰富的,所以这个阶段想切入RN可能是一个不错的选择。
众所周知对于现有的大多数项目来说都不是从头构建的,而要在原有项目的基础上引入React Native则肯定和用react-native init xxx创建工程不同。因此下面就来说下具体操作。不过在真正开始之前还是要先说明一下工具配置。
配置方法如下:
npm config set registry https://registry.npm.taobao.org --globalnpm config set disturl https://npm.taobao.org/dist --global1.加入package.json文件以及index.android.js文件
一般地,我们可以在项目根目录下创建package.json文件以及index.android.js文件。
package.json文件类似与Android中的build.gradle文件,在其中主要配置了React Native所需的依赖库以及一些脚本语句。以下的代码可以看作是一个package.json文件的模版,版本号可以根据需要而定。
index.android.js 文件是RN程序的入口文件。通常index.android.js 文件如下:
然后,在该目录下打开终端,运行 npm i 命令,安装React Native 所需的依赖,安装完成后会在根目录下创建node_modules文件夹,下载的依赖就在这个文件夹下。到此,第一步的工作已经完成了。
-----分割线------
实际上我们不会将RN代码放到Android工程里,因为在一般的公司项目中,使用SVN或者Git进行管理,客户端目录下一般都会有Android和iOS两个目录区分两个端。而React Native作为一个跨平台的框架,放在Android或者iOS目录里都不太合适。因此个人认为比较好的做法是在Android和iOS同级目录创建一个ReactNative目录,放置RN项目的代码。因此目录结构大致如下:
.├──Android ├──trunk ├──branches └──tags ├──iOS ├──trunk ├──branches └──tags └──ReactNative ├──trunk ├──branches └──tags此时,RN项目的代码包括package.json文件以及index.android.js文件都是在trunk目录下,自然地,需要在trunk目录打开终端,运行运行 npm i 命令,安装React Native 所需的依赖,而node_modules文件夹也自然会在该文件夹内创建。
2.在Android项目中配置ReactNative依赖
对于package.json文件在Android 工程中的情况
首先编辑在项目目录下build.gradle文件。
allprojects { repositories { google() jcenter() //添加这个仓库 maven { // All of React Native (JS, Android binaries) is installed from npm url "$rootDir/node_modules/react-native/android" } }}然后在编辑app目录下的build.gradle文件,添加React Native依赖。
implementation 'com.facebook.react:react-native:0.50.3'注意:该版本号需要与package.json文件中配置的RN版本号保持一致。
之所以需要在项目的build.gradle文件中添加maven配置,是因为Android项目默认的依赖包的源jcenter()并不包含最新版的React Native(它只到0.20.1)。
对ReactNative独立目录情况
与第一种情况并无太大区别,只是RN的maven仓库路径有所不同。因为通过版本控制拉取下来的工程位置各有不同,为了避免开发人员对项目目录下的build.gradle文件编辑冲突,推荐使用如下方式:
//加载local.properties配置Properties properties = new Properties()InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream();properties.load(inputStream)allprojects { repositories { jcenter() maven { // All of React Native (JS, Android binaries) is installed from npm url properties.getProperty('reactnative.dir') } }}其中local.properties文件不需要提交版本控制,并在其中添加一个reactnative.dir属性,属性值为RN的android工程目录路径,例如在我的项目中
reactnative.dir=/Users/littlebyte/svn/ReactNative/ReactNative/node_modules/react-native/android3.创建RN视图承载的Activity或Fragment
创建RN视图承载的Activity
创建RN视图承载的Fragment
与Activity不同,在Fragment中加载RN有点不一样。但在Android中加载RN,无论是在Activity还是Fragment,加载的都只是一个View而已。而给Fragment设置View,只需要Fragment的onCreateView返回RN的View即可。代码如下:
public class MyFragment extends Fragment { public static final String COMPONENT_NAME = "MyFragment"; private ReactRootView mReactRootView; @Override public void onAttach(Context context) { super.onAttach(context); mReactRootView = new ReactRootView(context); mReactRootView.startReactApplication( getReactNativeHost().getReactInstanceManager(), COMPONENT_NAME, null); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return mReactRootView; } @Override public void onDestroy() { super.onDestroy(); if (mReactRootView != null) { mReactRootView.unmountReactApplication(); mReactRootView = null; } if (getReactNativeHost().hasInstance()) { getReactNativeHost().getReactInstanceManager().onHostDestroy(getActivity() ); } } protected ReactNativeHost getReactNativeHost() { return ((ReactApplication) getActivity().getApplication()).getReactNativeHost(); } public ReactInstanceManager getReactInstanceManager() { return getReactNativeHost().getReactInstanceManager(); }}而后Fragment该怎么用就怎么用。
4.修改Application
修改自定义的 Application ,实现 ReactApplication 接口。
public class MainApplication extends Application implements ReactApplication { public final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage() ); } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; }}5.修改Application,添加相应的权限以及Activity声明
RN需要添加以下权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>除了声明自定义的Activity,还需要添加DevSettingsActivity,用来修改RN的相关设置。
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>至此,Android原生项目集成RN的工作就基本完成了。
6.调试
要调试首先需要启动RN的本地服务器。在package.json文件所在目录打开终端,运行react-native start命令即可启动本地服务器。然后安装并运行App。
如果使用模拟器调试则可以直接运行打开RN的页面,而如果使用真机调试还需要摇一摇弹出设置菜单,点击Dev Settings,设置Debug server host&port for device,填入你电脑的ip:8081即可。
之后就可以愉快的调试运行了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在atom+react-native项目中安装了nuclide。然而使用flow的时候出现了问题。$brew-vHomebrew1.2.0$flowversio
首先要确认已经配置好react-native的环境。#创建一个native应用,SimpleApp,然后进入项目目录react-nativeinitSimple
不论是React还是React-native,facebook官方都推荐使用ES6的语法,没在项目中使用过的话,突然转换过来会遇到一些问题,如果还没有时间系统的
项目背景:手动link的安卓App1.下载react-native-code-pushnpminstall--savereact-native-code-pus
1简介在之前的文章《Springboot集成SpringSecurity实现JWT认证》讲解了如何在传统的Web项目中整合SpringSecurity和JWT,