iOS+React Native混合开发初探 二

Posted xj_love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS+React Native混合开发初探 二相关的知识,希望对你有一定的参考价值。

前言

上篇文章已经搭好开发环境,后面根据文档也创建了测试工程,但是编译会报错,也不知从哪里入手,有点麻爪。下面根据我的步骤,一步一步的跑起第一个项目–Hello Wrold!

一 导入 node_modules

1.可以一个文件夹,专门放RN相关文件。不过做好心理准备,因为大部分文章都是放在根路径的,所以方法都依据根路径来的。不过另建文件夹,工程更简洁规整点。

注:打红框的文件一个都不能少。最下面会补上代码。需要demo加群:855808379
2.打开终端,cd到RN文件夹路径下。输入npm install,完成后,你就会看到node_modules文件在你文件下了。
3.各文件代码,记得替换里面的工程名为你自己的工程名
app.js

import React,  Component  from 'react';
import 
  AppRegistry,
  StyleSheet,
  Text,
  View
 from 'react-native';
 
export default class RNTest1 extends Component 
  render() 
    return (
      <View style=styles.container>
        <Text style=styles.welcome>
          Hello world!
        </Text>
      </View>
    );
  

 
const styles = StyleSheet.create(
  container: 
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  ,
  welcome: 
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  ,
);
 
AppRegistry.registerComponent('RNTest1', () => RNTest1);

app.json


  "name": "RNTest1",
  "displayName": "RNTest1"

index.js

/** @format */

import AppRegistry from 'react-native';
import App from './App';
import name as appName from './app.json';

AppRegistry.registerComponent(appName, () => App);

package.json


  "name": "RNTest1",
  "version": "0.0.1",
  "private": true,
  "scripts": 
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  ,
  "dependencies": 
    "react": "16.5.0",
    "react-native": "0.57.0"
  ,
  "devDependencies": 
    "babel-jest": "23.6.0",
    "jest": "23.6.0",
    "metro-react-native-babel-preset": "0.45.3",
    "react-test-renderer": "16.5.0"
  ,
  "jest": 
    "preset": "react-native"
  

二 Cocoapods导入React Native所必须的文件

1.podfile加入以下代码

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target ‘RNTest1’ do

pod 'React', :path => '/Users/xj_love/Desktop/ReactNative/RNTest1/RN/node_modules/react-native', :subspecs => [
'Core',
'CxxBridge', # 如果RN版本 >= 0.47则加入此行
'DevSupport', # 如果RN版本 >= 0.43,则需要加入此行才能开启开发者菜单
'RCTText',
'RCTNetwork',
'RCTWebSocket', # 调试功能需要此模块
'RCTAnimation', # FlatList和原生动画功能需要此模块
# 在这里继续添加你所需要的其他RN模块
]

# 如果你的RN版本 >= 0.42.0,则加入下面这行
pod "yoga", :path => "/Users/xj_love/Desktop/ReactNative/RNTest1/RN/node_modules/react-native/ReactCommon/yoga"

# 如果RN版本 >= 0.45则加入下面三个第三方编译依赖
pod 'DoubleConversion', :podspec => '/Users/xj_love/Desktop/ReactNative/RNTest1/RN/node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '/Users/xj_love/Desktop/ReactNative/RNTest1/RN/node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '/Users/xj_love/Desktop/ReactNative/RNTest1/RN/node_modules/react-native/third-party-podspecs/Folly.podspec'

end

2.第一个坑,报以下错:

不要慌,把这个支持的版本改高点就行。我一开始用的8.0.

3.第二个坑,yoga一定要小写。

4.第三个坑,node_modules路径一定要写对

5.打开终端,pod install就可以了。如果报错,加群联系:855808379

三 在项目中导入RN界面–Hello world!

1.注:记得替换工程名

#import "ViewController.h"
#import <React/RCTRootView.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    
    NSURL *jsCodeLocation;
    
    jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios&dev=true"];
    
    RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                             
                                                      moduleName:@"RNTest1"
                             
                                               initialProperties:nil
                             
                                                   launchOptions:nil];
    
    rootView.frame =CGRectMake(0,0,[UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
    
    [self.view addSubview:rootView];

2.启动npm,终端输入:npm start

3.启动RN,终端cd到RN文件夹下,输入:react-native start

4.让项目允许http链接访问,不然会报错

5.Xcode启动项目,ok,大功告成,Hello world!

欢迎大家入群交流学习,高级iOS开发交流群:855808379

以上是关于iOS+React Native混合开发初探 二的主要内容,如果未能解决你的问题,请参考以下文章

React Native 初探

React Native电商项目实战混合APP开发 React Native实战 混合APP实战开发

React Native For Android 架构初探

React Native For Android 架构初探

React Native For Android 架构初探

React Native IOS源码初探