01 ReactNative 初始文件分析、IDE和调试

0*01 认识RN文件

  • 前面有提到,新版的已经没有index.android.js和index.ios.js,默认生成的工程下有一个App.js和index.js,内容如下(注释是自己加的)
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react'; //从react框架导入Component框架变量
import {
  Platform,
  StyleSheet,
  Text,
  View
} from 'react-native';  // 从react-native导入相关框架变量

// 根据平台定义‘指令’
const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' +
    'Cmd+D or shake for dev menu',
  android: 'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
});

type Props = {};// 以前的版本没有这个参数 一个属性集
// 定义一个名为App的类,继承了React组件
export default class App extends Component {
  render() {
    return (// 整个就是一个RN组件,通过render()返回的组件会被展示在屏幕上
    // View是根视图,返回的组件只能有一个根视图
    // style是View的属性,设置属性值为{styles.container}  这个值在下面styles中定义
      
      // 定义一个Text组件,设置属性 
        
          Welcome to React Native!
        
        
          To get started, edit App.js
        
        
          {instructions}
        
      
    );
  }
}

//  定义属性集,有点类似一个集合类,每个item是一个属性集,每个属性是一个键值对
const styles = StyleSheet.create({
  container: {
    flex: 1,    // 表示宽高会自动扩展
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,     //边距  单位pt?
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',   // 颜色值,可以设置rgba格式也可以设置英文
    marginBottom: 5,
  },
});
=================index.js文件===============
import { AppRegistry } from 'react-native';
import App from './App'; // 导入同文件夹下的App组件
// 注册这个组件
AppRegistry.registerComponent('LearnRN', () => App);
  • RN的js文件和传统的js有点不同,被称为JSX,是JavaScript和XML的结合
  1. 首先从React框架中导入组件
  2. 从React-native框架中导入要用到的控件,用什么导入什么
  3. 定义一个类继承Component,重写render()方法,返回一个具体的组件(视图)
  4. 表示一个具体的控件,在<>中设置这个控件的属性,在<>中间的内容表示包含在这个视图中具体内容
  5. 定义控件的style
  6. 在index.js中导入创建的控件并注册。

ReactNative编辑器

  • 根据操作系统和移动系统的不同,参考React Native 开发之 IDE 选型和配置。
  • 个人使用Visual Studio Code 比较轻量
  1. 下载地址:https://code.visualstudio.com/
  2. 添加以下插件,就可以支持RN代码了
    01 ReactNative 初始文件分析、IDE和调试_第1张图片
    插件.JPG

ReactNative代码调试

使用chrome调试

  1. 打开chrome-->右上角三个点--> 更多工具--> 扩展程序-->搜索React Developer Tools。(正常是不会成功的)
  2. 目前各种chrome插件网站有提供该插件,但不确定是不是最新的,建议尽量使用科学上网的方式,登录chrome商店,搜索React Developer Tools下载。商店地址
  3. 关于科学上网,有这样一个新出的插件,大家可以试试插件下载地址
  4. 使用最新版RN并且安装了最新的React Developer Tools,使用命令行运行一次react-native run-android,项目正常运行后(会有两个命令行窗口,都不要关闭),摇一摇或者ctrl+m打开菜单,选择Debug JS Remote,会自动打开Google Chrome;

现有的版本,默认会设置反向,不需要自己输入tcp 8081什么的

  1. 打开后视图如下,直接按F12进入调试界面
    01 ReactNative 初始文件分析、IDE和调试_第2张图片
    rndebug.JPG
01 ReactNative 初始文件分析、IDE和调试_第3张图片
rn debug2.png

点击上方的sources查看源码,可以使用ctrl+p来搜索App.js,也可以直接在左侧搜索debuggerWorker.js,点开第一项就是App.js
根据需要设置断点,注意,此时reload断点会失效,所以目前只能测试可以调用方法的,即只能在运行后,进行点击或者输入之类的才能debug,如果是第一次初始化界面的,全部直接跳过。
右上方是正常的单步跳过、进入方法、跳出等调试常用方法。最右的圆形按钮,点击后可以设置pause on exception,出现异常就会自动断点,需要时可以打开。

  1. 初学者可能不知道怎么写方法,下面提供一个可以输入的界面,可以在updateNum方法中打断点测试。App.js代码如下
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  Platform,
  StyleSheet,
  Text,
  View,
  AppRegistry,
      Dimensions,
    PixelRatio,
    TextInput
} from 'react-native';

const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' +
    'Cmd+D or shake for dev menu',
  android: 'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
});

const {height,width} = Dimensions.get('window');
const pixelRatio = PixelRatio.get();
let widthOfMargin = Dimensions.get('window').width*0.05;

type Props = {};
export default class App extends Component {
  constructor(props){
    super(props);
    this.state = { 
      inputNum:'',
      password:''  
    };
  }

  updateNum(newNum){
    this.setState((state) => {
      console.log('update has been exec');
      return {
        inputNum:newNum,
      };});
  }

  updatePW(newPW){
    this.setState(
      () => {
        return {
          password : newPW,
        };
      }
    );
  }

  render() {
    return (
      
        this.updateNum(newNum)}
          />
        
          您输入的手机号:{this.state.inputNum}
        
        
        
          确定
        
      
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    // alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  textInputStyle: {
    fontSize: 20,
    textAlign: 'center',
    backgroundColor: 'yellow',
    margin: widthOfMargin,
  },
  textStyle: {
    margin: widthOfMargin,
    textAlign: 'center',
    color: '#333333',
    marginBottom: 10,
  },
  bigTextStyle:{
    margin:widthOfMargin,
    backgroundColor:'green',
    textAlign:'center',
    color:'red',
    fontSize:30
  }
});

界面如下:

01 ReactNative 初始文件分析、IDE和调试_第4张图片
ontextchange.jpg

使用VSCode进行调试

  1. 先在插件商店下载React Native Tools

  2. 点击左边的虫子,点击上面下拉箭头(不是绿色剪头),添加配置,默认会创建lauch.json,搜索React debug android,然后直接按默认配置即可。

    01 ReactNative 初始文件分析、IDE和调试_第5张图片
    vscodetoole.png

  3. 给App.js添加断点,在debug界面,点击绿色剪头(右边的名字就是在lauch.json中设置的名字),正常运行即可。

  4. 然而,如果你的插件版本是0.6.4,断点都不会成功,只会直接跳过 显示“未验证的断点,已设置断点但还未绑定”,目前这个问题已经被提交到vscode-react-native。应该是因为RN升级导致的不匹配,等待更新即可。

其他调试方式

  1. 使用console.error() 显示红屏警告,使用console.warn()显示黄屏警告
  2. 参见RN中文网 调试部分

建议:可以使用vscode编辑代码,使用chrome+RN Dev Tool断点调试,如果没有太大的问题,直接用console打印即可。
遇到断点调试,断点不能hit,直接运行的情况,基本上都是插件不匹配,或者没有更新,如果更新RN dev tool还不能解决的话,基本上就是个待解决issue了。

你可能感兴趣的:(01 ReactNative 初始文件分析、IDE和调试)