RN集成

作者: boy丿log | 来源:发表于2019-06-06 15:16 被阅读0次

搭建环境

首先你需要搭建RN的环境

第一步:

brew install node
brew install watchman

如果你的homebrew没有升级,那么你可以打开终端:

 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

第二步,设置镜像

npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global

第三步,安装命令行工具

npm install -g yarn react-native-cli

第四步,接下来设置镜像源:

yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global

之后你就可以用yarn代替npm install命令,用yarn add 某第三方库名代替npm install 某第三方库名。如果出现permission denied的错误,那么你需要查看第三步安装后的给出的信息,

sudo chown -R $USER:$(id -gn $USER) /Users/你的mac用户名/.config

第五步,创建一个新项目:

react-native init AwesomeProject

这个命令会在你当前路径创建一个AwesomeProject项目。

你可以cd到这个项目中来启动这个项目

cd AwesomeProject
react-native run-ios

集成进自己的项目

第一步,在项目根目录创建react文件夹并将AwesomeProject项目下面的App.js、app.json、index.js、package.json拷贝到React文件夹下面
修改app.json中的name和displayName为 iOS工程的名称
修改package.json中的name 为 iOS工程的名称

第二步,安装依赖
cd 到react目录,执行

npm install

完成后会在React目录中生成一个node_modules文件夹

第三步,添加react Native框架

打开podfile文件修改:

pod'React', :path => './React/node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge',
    'DevSupport',
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket',
  ]
  # 如果你的RN版本 >= 0.42.0,则加入下面这行。
  pod"yoga", :path => "./React/node_modules/react-native/ReactCommon/yoga"
 # 这里注意: 如果是0.49以下的RN,则使用下面这条:
 # pod "Yoga", :path => "./React/node_modules/react-native/ReactCommon/yoga"

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

然后pod install。
这里我遇到了一个

No such file or directory @ rb_sysopen

的错误,原因是文件路径不太对,把上面的:path修改后就可以了


目录

修改后代码:

pod 'React', :path => './React/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 => './React/node_modules/react-native/ReactCommon/yoga'

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

然后,继续pod install安装。

运行第一个iOS RN应用

可以按官方教程来,首先打开index.js,将官方里面的内容

import React from 'react';
import {AppRegistry, StyleSheet, Text, View} from 'react-native';

class RNHighScores extends React.Component {
  render() {
    var contents = this.props['scores'].map((score) => (
      <Text key={score.name}>
        {score.name}:{score.value}
        {'\n'}
      </Text>
    ));
    return (
      <View style={styles.container}>
        <Text style={styles.highScoresTitle}>2048 High Scores!</Text>
        <Text style={styles.scores}>{contents}</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#FFFFFF',
  },
  highScoresTitle: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  scores: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

// 整体js模块的名称
AppRegistry.registerComponent('RNHighScores', () => RNHighScores);

复制进去,然后iOS项目中添加代码:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios"];
    
    RCTRootView *rootView =
    [[RCTRootView alloc] initWithBundleURL: jsCodeLocation
                                moduleName: @"RNHighScores"
                         initialProperties:
     @{
       @"scores" : @[
               @{
                   @"name" : @"Alex",
                   @"value": @"42"
                   },
               @{
                   @"name" : @"Joel",
                   @"value": @"10"
                   }
               ]
       }
                             launchOptions: nil];
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view = rootView;
    [self presentViewController:vc animated:YES completion:nil];
}

需要导入头文件#import <React/RCTRootView.h>。
然后,启动rn监听和服务,

npm start

这个时候直接运行iOS项目,点击项目后会出现显示界面。

界面

好了,今天的集成就到这里了。

相关文章

网友评论

    本文标题:RN集成

    本文链接:https://www.haomeiwen.com/subject/ipayxctx.html