React Native学习记录

本文详细讲述了如何在ReactNative项目中遇到的初始化问题,涉及node版本设置、使用nvm进行版本管理、创建项目、模拟器运行、真机调试,以及在开发环境和生产环境部署的注意事项,包括调试工具的使用和打包流程。
摘要由CSDN通过智能技术生成

一、创建RN项目的时候是空文件夹的问题

1.使用npx react-native init RNDemos初始化项目的时候,会报错,模版错误,然后创建出来一个空的文件夹

2.如果出现这种情况,需要设置npm install -g react-native-cli 

3.安装完成以后再次初始化项目,会进行报错,是因为node版本低的问题,我们使用的node版本需要大于18才能初始化项目成功

二、使用nvm来进行node版本的管理

1.安装nvm版本管理器

2.使用nvm list来查看可以使用的node版本

3.使用nvm来安装指定的node版本

4.使用nvm切换node版本

三、初始化RN项目

1.可以使用npx react-native init MyAwesomeApp初始化项目

2.初始化成功以后的项目目录结构如下:

3.可以使用npm run ios在模拟器上运行RN项目

4.此时可以在模拟器上运行到项目

5.如果要在真机上运行项目,需要打开ios文件夹里面的.xcworkspace,然后修改bundleId,然后运行,就可以在手机上进行运行

四、调试工程

React Native中文网调试 · React Native 中文网

1.使用真机开发时,只需要晃动设备就可以打开调试功能,需要注意的是,使用真机进行调试的时候,调试的真机和开发程序的计算机需要在同一个网络环境下

五、安装指定版本的React-Native项目

1.使用react-native init --version='0.66.4' RNDemo命令安装指定版本的RN项目

需要注意的点:如果使用高版本的node,那么会安装最新版本的react-native,指定版本的react-native项目就无效,所以我们需要使用低版本的node进行安装

2.安装成功之后会没有.workspace项目,我们需要切换到含有podfile的目录下pod install进行pod库的安装

3.安装成功以后打开workspace文件就可以运行Rn项目了

六、调试RN项目

1.使用react-native start --port 端口号来进行项目运行

七、React-Native当中的标签

1.View标签

1)相当于以前web当中的div标签

2)不支持设置字体大小、字体颜色等

3)不能直接放文本内容

4)不支持直接绑定点击事件(一般使用TouchableOpacity来代替)

2.Text文本标签

1)文本标签可以设置字体颜色、字体大小等

2)支持绑定点击事件

3.TouchableOpacity(可以绑定点击事件的块级标签)

1)相当于块级的容器

2)支持绑定点击事件onPress

3)可以设置点击时的透明度

import {Component} from 'react';
import React from 'react';
import {Text, TouchableOpacity, StyleSheet, Alert} from 'react-native';

class Test extends Component {
  handlePress() {
    Alert.alert('点击弹框');
  }
  render() {
    return (
      <TouchableOpacity
        activeOpacity={0}
        style={{marginTop: 60, marginLeft: 20}}
        onPress={this.handlePress}>
        <Text>TouchableOpacity</Text>
      </TouchableOpacity>
    );
  }
}

export default Test;

4.Image标签

      <View>
          <Image source={require('./images/1.png')} style={{height: 50}} />
          <Image source={require('./images/scan.gif')} style={{height: 50}} />
          <Image
            source={require('./images/profileBackground.jpg')}
            style={{height: 50}}
          />

          {/* 如果加载网络图片的时候,需要提供直接指向图片文件的链接,例如.jpg,.png等格式的链接,而不是一个网页 */}
          <Image
            style={{width: 200, height: 50}}
            source={{
              uri: 'https://lmg.jj20.com/up/allimg/tp10/22022312542M617-0-lp.jpg',
            }}
          />
        </View>

​​​​​​​5.ImageBackground

一个可以使用图片当作背景的容器,相当于以前的div+背景图片

  <ImageBackground source={require('./images/1.png')}>
     <Text>Inside</Text>
  </ImageBackground>

​​​​​​​​​​​​​​6.TextInput

输入框组件,可以通过onChangeText事件来获取输入框的值

        {/* 当文本框的值改变的时候进行执行此函数 */}
        <TextInput
          onChangeText={text => {
            Alert.alert(text);
          }}
        />

7.FlatList

高性能的简单列表组件,支持下面这些常用的功能:

1)完全支持跨平台

2)支持水平布局模式

3)行组件显示或隐藏可配置回调事件

4)支持单独的头部组件

5)支持单独的尾部组件

6)支持自定义行间分割线

7)支持下拉刷新

8)支持上拉加载

9)支持跳转到指定行(ScrollToIndex)

10)支持多行布局

如果需要分组/类/区(section),请使用<SectionList>

 <FlatList
          style={{height: 100}}
          data={this.state.list}
          renderItem={({item, index}) => {
            console.log(item);
            return (
              <View>
                <Text>{item.title}</Text>
              </View>
            );
          }}
          keyExtractor={item => item.id}
          ItemSeparatorComponent={() => {
            // 声明项目之间的分隔符
            return <View></View>;
          }}
          ListEmptyComponent={() => {
            // 列表数据为空时,展示的组件
            return <Text style={{fontSize: 30}}>空空如也!</Text>;
          }}
          // 下拉刷新
          refreshing={this.state.isloading}
          onRefresh={() => {
            this.setState({
              isloading: true,
            });

            // 模拟网络请求
            setTimeout(() => {
              // 模拟请求数据
              Alert.alert('刷新请求数据');
              this.setState({
                isloading: false,
              });
            }, 2000);
          }}
          // 上拉加载
          onEndReachedThreshold={0.1} // 声明触底的比率,0.1表示距离底部还有10%
          onEndReached={() => {
            Alert.alert('到底了');
          }}
          ListHeaderComponent={() => {
            // 声明列表的头部组件
            return <Text>列表头部</Text>;
          }}
          // 设置水平排列
          // horizontal={true}
          // initialScrollIndex={3} // 初始滚动索引
          initialNumToRender={4} // 指定初始渲染数据的数量,一般数量要填满一屏幕
          numColumns={3} // 指定列数,数据项必须等高,无法支持瀑布流
          // inverted={true} // 列表反转
          ListFooterComponent={() => {
            // 声明列表的尾部组件
            return <Text>没有更多了</Text>;
          }}></FlatList>

八、StyleSheet

1.RN中的样式和CSS中的不同

1)没有继承性

RN中的继承只发生在Text组件上

2)样式名采用小驼峰命名

fontSize

3)所有尺寸都是没有单位的

width:100

4)有些特殊的样式名

marginHorizontal(水平外边距) marginVertical(垂直外边距)

2.RN样式的声明方式

1.通过style属性直接声明

1)属性值为对象:<组件 style={{样式}}/>

2)属性值为数组: <组件 style={[{样式1},...{样式N}]}/>

2.在style属性中调用StyleSheet声明的样式

1)引入

import {StyleSheet} from 'react-native'

2)声明

const styles = StyleSheet.create({foo:{样式1},bar:{样式2}})

3)使用:<View style={[styles.foo, style.bar]}>内容</View>

<View style={{marginHorizontal: 20, backgroundColor: '#dfb'}}>
     <Text style={[styles.red, styles.fontLarge]}>Hello RN</Text>
</View>
const styles = StyleSheet.create({
  red: {
    color: '#e33',
  },
  fontLarge: {
    fontSize: 40,
  },
});

九、调试环境和生产环境运行React Native项目

1.调试环境下运行React Native项目,当退出RN环境用手机打开应用会是空白页面,打不开

2.生产环境运行React Native项目

1)在RN项目终端运行如下命令

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios

2)运行完成以后会生成一个main.jsbundle文件

3)​​​​​​​AppDelegate.m文件有进行判断,测试模式和生产模式

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

4)​​​​​​​如果想在生产环境运行,运行到手机上把环境放到Release模式下

​​​​​​​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值