RN(React Native)

这篇具有很好参考价值的文章主要介绍了RN(React Native)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 RN是React的原生组件库

网址:React Native 中文网 · 使用React来编写原生应用的框架

RN(React Native)RN(React Native)

一、ReactNative开发环境的搭建

RN(React Native)RN(React Native)

RN(React Native)

RN(React Native)

 在本机搭建RN项目开发运行环境 —— 3GB+

 ①安装必需的编译软件:Node.js + JDK

 ②安装Android原生App开发软件 —— Android Studio

 ③使用Android开发软件下载编译必需的第三方模块—— Android SDK

 ④配置系统的环境变量,告诉系统Android SDK的安装路径

 ⑤下载并安装RN项目脚手架工具,创建空白项目  

npx   react-native   init   MyRnApp

 ⑥编译空白项目,得到AndroidApp安装文件

cd  MyRnApp

npx  react-native   run-android

RN英文官网: reactnative.dev

RN中文网:reactnative.cn

运行RN空白项目 —— 254MB+

  1.安装并启动Android模拟器(例如夜神、雷电、逍遥等)

  2.在模拟器中安装空白项目中的.apk文件

@\android\app\build\outputs\apk\debug\app-debug.apk

  3.启动空白脚手架项目自带的开发服务器

npm  start

  4.启动手机中的App,配置开发服务器的IP地址和端口号

172.163.100.77:8081

  5.重启手机中的App,即可以自动连接到开发服务器

手机中无法见到“Welcome To ReactNative”欢迎界面的可能原因:

① 没有启动开发服务器

② 手机App没有正确的配置开发服务器IP和端口号

③ 配置完服务器地址后没有重新启动App

手机中App无法启动,或提示“MyRnApp启动失败”,或闪退,或白屏 解决办法:

① 重启App试试;如果不行,继续②

② 卸载App,再重新安装;重启后重新配置服务器IP和端口号;如果不行,继续③

③ 重启模拟器,重新安装App,重新配置服务器IP和端口号;如果不行,继续④

④ 重启Windows,重启模拟器,重新安装App,重新配置服务器IP和端口号;如果不行,继续⑤

⑤ 卸载夜神,换其他模拟器

三、RN项目中的样式问题

 RN中没有CSS;

 有一套自己的样式规则,其中有些与标准的CSS名称相近而已——RN项目被编译为Java或OC,运行时完全脱离浏览器的!!!

 声明组件的样式只能用style,没有class —— RN中没有任何一个属性/事件是“通用”的

 具体的样式编写规则:

 1.View组件的display属性只有两个可取值:flex(默认)、none;没有inline、block等;

 2.所有的容器都是弹性容器,主轴方向默认都是column,而不是row;

 3.RN中没有float属性,不能使用浮动/流式布局;

 4.RN中有position属性,可取值只有relative/absolute/fixed;

 5.组件的样式有三种形式:

行内样式:<Text style={{color:'red'}}>

内部样式:let ss = StyleSheet.create({danger:{color:'red'}})   

<Text style={ss.danger}>

外部样式:export default let gss = StyleSheet.create({danger:{color:'red'}})   

import gss from 'style.js'   <Text style={gss.danger}>

 6.RN中的样式没有Cascading(级联)特性,即父组件的样式不会继承给子组件——Text中的Text除外

 7.RN中的尺寸单位只有两种:%、px;而且像素需要省略px,例如:200px需要简写为200;

 8.默认字体大小也是14px,且没有最小值限制;

 9.RN中所有的样式都是“单值的”,一个属性只能赋一个值,例如:padding: 30;  错误:padding: 30  50;

   所有需要赋值为“多值的”的样式,都被取消了,例如:border、background。

、RN中的常用组件

  1、Text:文本组件,RN中唯一可以放置文本的组件

  2、View:视图容器,默认采用弹性布局

  3、Image:图片,分为两种形式:

①手机本地的图片(静态图片):使用时务必把图片打包入App(即必需导入)

let  logo = require('../img/logo.png')

import  logo  from  '../img/logo.png'

<Image source={logo}/>

②远程服务器上的图片(动态图片):使用时必须明确指定宽高尺寸(否则默认宽高都是0)

<Image style={{width: 100, height: 50}}  source={{uri: '图片地址'}}/>

提示:Image没有onPress或类似的属性。

  4、ImageBackground:背景图组件,为其中包含着的组件添加背景图

<ImageBackground  source={本地或远程图片}> 其它任意组件 </ImageBackground>

  5、Button:按钮组件,是一个单标记标签,不能添加innerText;没有style属性!!! 

<Button title="登录" onPress={处理方法}/>

提示:由于Button无法使用style订制样式,项目中一般用Text代替。

 6、Pressable:可按压的组件,为其它组件添加“按压”相关的4个事件

<Pressable onPress={} onLongPress={} onPressIn={} onPressOut={}>其它组件</Pressable>

 7、TextInput:文本输入组件,可用于单行文本输入框、单行密码输入框、多行文本输入框

<TextInput placeholder="" secureTextEntry={} multiline={}  value={}  onChangeText={}/>

提示:获取用户的输入值,只能使用类似“受控组件”方案(没有“非受控组件”方案),且onChange事件替换为onChangeText —— RN此时没有完全模拟出DOM操作!!

 8、FlatList:平面列表,用于“纵向”或 “横向”或“横+纵向”呈现批量数据

<FlatList  data={数组}  renderItem={渲染一个列表项的方法}/>

 9、TouchableOpacity:触摸后不透明度发生改变的组件,主要为其它元素添加点击反馈

<TouchableOpacity>需要添加点击反馈的子组件</TouchableOpacity>

 10、ActivityIndicator:活动指示器,显示一个不停旋转的加载中提示动画

AJAX异步数据请求效果有哪些实现方案?

①XHR  ②jQuery.ajax()  ③axios   ④wx.request   ⑤uni.request   ⑥fetch

、RN中的异步数据请求

  React项目中如果是基于浏览器的,可以使用XHR或fetch任意方案;

  RN项目都是脱离浏览器的,不能使用XHR;官方模拟fetch API标准实现了一套类似的接口。

//使用fetch发起GET请求

let res = await fetch( url )

let data = await res.json( )

//使用fetch发起POST请求

let options = {method, headers, body}

let res = await fetch( url, options )

let data = await res.json( )

框架

路由导航

Vue.js

Vue-Router

小程序

pages.json + 五个跳转方法

uni-app

pages.json + 五个跳转方法

React

基于浏览器的项目:React-Router-DOM

脱离浏览器的RN项目:React-Navigation

六、RN中的路由导航模块 —— React-Navigation

  是一个专用于脱离浏览器的RN项目的路由导航模块;

  英文官网: https://reactnavigation.org

  简历上:“熟练使用英文手册 —— 大标题字+示例代码”

  基础使用步骤:

  ①在RN项目中下载导航必需的第三方模块

npm  i   @react-navigation/native

npm  i   react-native-screens

     npm  i   react-native-safe-area-context

npm  i   @react-navigation/native-stack

  ②重新构建一遍当前的App安装文件重新安装到手机中

npx  react-native   run-android        此步需要安装3GB+的开发环境

  ③在启动模块中创建路由器>路由词典>路由”

let {Navigator, Screen} = createNativeStackNavigator()

<NavigationContainer>

<Navigator>

<Screen name="login" component={AdminLogin}/>

....

</Navigator>

</NavigationContainer>

  ④访问测试确保每个地址都可以显示出对应的组件

  ⑤修改标题栏文字及样式

<Screen name=" " component={ }  options={{title: ' ', ...}}/>

  ⑥如何在两个 屏幕/页面 间跳转
导航跳转:props.navigation.navigate('路由名称')

导航返回:props.navigation.goBack( )

  ⑦页面跳转时传递路由参数

Screen1:props.navigation.navigate('Screen2',  {k1: v1,  k2: v2, ...})   //类似于父子组件间发射事件

Screen2:组件挂载时  let v2 = props.route.params.k2

?k=v&k=v 称为“查询字符串”或“搜索参数” —— 是HTTP协议的一部分,用于规定客户端浏览器与WEB服务器之间传递数据的格式要求

React生态系统中成员的最新版本:

React:18.2

React-Router-DOM:6.4

React Native:0.70

React-Navigation:6.x

、RN中的innerHTML绑定

技术

innerText绑定

innerHTML绑定

Vue.js

小程序/uni-app

React

ReactNative

<Text>{内容}</Text>

RN项目脱离浏览器的,无法解释执行HTML片段!

只能在RN项目中嵌入一个微型浏览器才行——WebView组件!

<WebView  source={{uri: 'https://tmooc.cn'}}/>

<WebView  source={{html: '<h1>标题</h1><hr/>'}}/>

提示:ReactNative官方的WebView已经禁止使用了;推荐使用社区提供的react-native-webview,但此组件的高度无法自动增长,推荐使用第三方提供的 AutoHeightWebView 组件;使用方法:

①下载必需模块文件

npm  i   react-native-webview

npm  i   react-native-autoheight-webview

②重新构建一遍整个RN项目,得到新的.apk文件,重新安装到手机中

npx  react-native  run-android

③在页面中使用AutoHeightWebView

<AutoHeightWebView  source={{uri: 'https://tmooc.cn'}}/>

<AutoHeightWebView  source={{html: '<h1>标题</h1><hr/>'}}/>

、RN项目构建        

  RN项目最终都被编译为原生Java或Objective-C代码,有两种构建模式:

  ① 调试模式 —— 编译得到的代码未经优化,但是可以连接开发服务器进行实时更新

  npx   react-native    run-android

  得到安装文件:  app-debug.apk——45MB

  ② 发布模式 —— 编译得到的代码经过优化压缩,可以发布到应用商店供用户正式使用

  得到安装文件:  app-release.apk——20MB

     类似于之前的 npm run build 操作;但是本质不同:是把JS=>Java,编译Java项目(需要Gradle)

  提示:想执行此操作,必须之前安装好3GB+的环境了

  打包发布RN应用为Android APP的步骤

  官网手册地址:https://www.react-native.cn/docs/signed-apk-android

  ①生成一个签名密钥(即App所有权证书)

keytool   -genkeypair   -v   -storetype   PKCS12   -keystore  d:/my-release-key.keystore  -alias  my-key-alias  -keyalg  RSA   -keysize  2048   -validity   10000

提示:keytool.exe文件在JDK的安装目录下的/bin目录下,上述命令必须在此目录下运行

  ②设置gradle变量(Gradle就是Java项目中的“Webpack”)

把my-release-key.keystore文件放到你工程中的/android/app文件夹下

修改/android/gradle.properties,在最后添加如下变量的声明:

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore

MYAPP_RELEASE_KEY_ALIAS=my-key-alias

MYAPP_RELEASE_STORE_PASSWORD=*****

MYAPP_RELEASE_KEY_PASSWORD=*****

  ③把证书相关变量加入到项目的gradle配置中

修改/android/app/build.gradle,在第148行后添加:

release {

            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {

                storeFile file(MYAPP_RELEASE_STORE_FILE)

                storePassword MYAPP_RELEASE_STORE_PASSWORD

                keyAlias MYAPP_RELEASE_KEY_ALIAS

                keyPassword MYAPP_RELEASE_KEY_PASSWORD

            }

     }

修改第176行,把 signingConfig signingConfigs.debug  修改为 signingConfig signingConfigs.release

  (可选)修改App图标和名称

修改\android\app\src\main\res\values\strings.xml文件,可以设置App的名字:

<string name="app_name">学子管理端</string>

把自己的App图标文件替换默认的,替换掉\android\app\src\main\res\mipmap-xxxx目录下的所有图标

  ⑤如果App需要访问网络(例如:访问服务器端数据API),需要向用户申请网络使用权限

在\android\app\src\main\AndroidManifest.xml中确保有如下行:

    <uses-permission android:name="android.permission.INTERNET" />

  使用gradle编译项目生成发行版的APK文件

进入项目的/android,运行此目录下的文件:

gradlew  assembleRelease

  成功后,在\android\app\build\outputs\apk\release\下得到app-release.apk,可以发布到各大应用市场或者直接下载到手机安装即可

API-1.1: 管理员登录:

https://www.codeboy.com/xuezi/admin/data/admin_login.php?aname=admin&apwd=123456

API-1.2: 当前登录的管理员可用的功能菜单: 

https://www.codeboy.com/xuezi/admin/data/main_menu.php

API-1.3: 商品列表:

https://www.codeboy.com/xuezi/admin/data/product_list.php?pno=2&pageSize=10

API-1.4: 商品详情:

https://www.codeboy.com/xuezi/admin/data/product_details.php?lid=3文章来源地址https://www.toymoban.com/news/detail-466570.html

到了这里,关于RN(React Native)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React Native 桥接组件封装原生组件属性

    自定义属性可以让组件具备更多的灵活性,所以有必要在JS 层通过自定义属性动态传值。 因为 ViewManager 管理了整个组件的行为,所以要新增组件属性也需要在这里面(如 InfoViewManager)进行定义。 1、在InfoViewManager 中定义一个 setAvatar 方法。 @ReactProp 是 React Native 中的注解,用

    2024年01月21日
    浏览(41)
  • RN(React Native)

     RN是React的原生组件库 网址:React Native 中文网 · 使用React来编写原生应用的框架 一、 ReactNative开发环境的搭建   在本机搭建RN项目开发运行环境  —— 3GB+  ①安装必需的编译软件:Node.js + JDK  ②安装Android原生App开发软件 —— Android Studio  ③使用Android开发软件下载编译必

    2024年02月07日
    浏览(43)
  • React Native RN state props

    state:  是RN 专门用来标识是否重新渲染,通过属性的值来更新数据,React 内部会监听 state 的变化,一旦发生变化就会主动触发组件的 render() 方法来更新 Dom 结构,另外state是组件私有的,是没有办法通过其他组件传递过来的。 setState() 方法会把对组件 state 的改变加入到队列

    2024年02月15日
    浏览(51)
  • react native引用原生组件时无法显示的问题处理

    最近有个需求,要在react native中嵌入一个原生的视频组件,同事嵌入后发现有问题: 内容无法显示 https://musicfe.com/rn-android-webview 参考这个方法,在嵌入之后调用一下。 内容动态变化时的高宽不对,以及原生的edittext输入框无法删除 看了一下,是因为内容变化的时候,一是re

    2024年02月05日
    浏览(56)
  • React-Native学习,RN的容器Flex-Box布局

    justify-content(在RN中属性名称为:justifyContent)在主轴上对齐方式 align-items(在RN中属性名称为:alignItems)在交叉轴上的对齐方式 在React Native中,当没有设置容器的主轴方向时,默认容器主轴方向为:flexDrection: \\\'column\\\',也就是说,当我们的容器的主轴的排布方向为竖直方向时

    2024年02月16日
    浏览(54)
  • 【RN】学习使用 Reactive Native内置UI组件

    当把导航处理好后,就可以学习使用ui组件了(两者没有先后关系,个人习惯)。 在 Android 和 iOS 开发中,一个视图是 UI 的基本组成部分:屏幕上的一个小矩形元素、可用于显示文本、图像或响应用户输入。甚至应用程序最小的视觉元素(例如一行文本或一个按钮)也都是各

    2024年02月22日
    浏览(45)
  • [快速上手RN] 3. React native 制作底部导航栏 Bottom Tab Bar

    [快速上手RN] 0.React Native 快速启动项目 [快速上手RN] 1. React native 项目集成UI Kitten [快速上手RN] 2. React native 项目色彩主题色编辑及使用 [快速上手RN] 3. React native 制作底部导航栏 Bottom Tab Bar [快速上手RN] 4. React native 集成redux 首先我们确认目标 在APP底部新增一个导航栏 导航栏点

    2024年02月05日
    浏览(53)
  • 求助帖:React Native failed installing Ruby Gems(rn 下载 Runby Gems 失败)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 react native当前版本0.72.4,官方文档也是最新的, macos:13.3。 最近要用RN做一个项目,参照官方文档链接: link 已经完成了前期的配置工作,直到最后一步创建AsomeProject示例项目时候,RN下载依赖卡在Inst

    2024年02月07日
    浏览(46)
  • React Native 桥接原生常量

    在 SmallDaysAppModule 这个模块中有一个方法 getConstans ,重载这个方法就可将自定义的常量返回,系统会自行调用该方法并返回定义的常量将其直接注入到 JS 层,在 JS 层直接获取即可。 在 JS 层只需要从 SmallDaysApp 中解构出自定义的常量即可。 效果如下: 相关链接: React Native

    2024年01月24日
    浏览(49)
  • React Native 图片组件基础知识

    在 React Native 中使用图片其实跟 HTML 中使用图片一样简单,在 React Native 中我们使用 Image 组件来呈现图片的内容,其中主要的属性有: source 。这个属性主要是设置图片的内容,它可以是网络图像地址、静态资源、临时本地图像以及本地磁盘中的图像。 搭建基础框架 编写卡片

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包