
React Native
文章平均质量分 85
Facebook 在 React.js Conf 2015 大会上推出了基于 JavaScript 的开源框架 React Native。React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用。
No Silver Bullet
业精于勤荒于嬉,行成于思毁于随。
学业由于勤奋而专精,由于玩乐而荒废;德行由于独立思考而有所成就,由于因循随俗而败坏。
——出自(唐)韩愈《进学解》
展开
-
React Native进阶(六十一): WebView 替代方案 react-native-webview 应用详解
是一个的第三方库,用于在应用中嵌入Web内容。它基于原生WebView控件,提供了丰富的API和灵活的配置选项,使开发者能够轻松地在应用中展示网页、处理网页事件等。此外,还具备性能优化、安全性提升等优势,使得它在替代原生WebView方面更具竞争力。随着WebView组件从核心库中移除,成为了替代原生WebView的最佳选择。它具备丰富的API和配置选项、性能优化、安全性提升等优势,使得开发者能够更轻松地在应用中嵌入Web内容。未来,随着的不断发展,原创 2025-03-22 16:51:16 · 644 阅读 · 0 评论 -
React Native进阶(六十):webview实现屏蔽所嵌套web页面异常弹窗
在项目集成web页面时,webview嵌套方式是常用方式。如果所嵌套的web页面由于某种不可控因素导致出现错误弹窗信息,webview作为web嵌套方式应该对其行为可控。的WebView组件在较新的版本中已经被社区维护的取代,r允许通过属性在页面加载前注入代码,这样能更早地覆盖错误处理和alert等方法。在WebView组件中注入JavaScript代码,覆盖,以及等方法。使用onMessage和onError事件处理程序来捕获可能的错误信息,但阻止它们显示弹窗。测试不同的场景,比如。原创 2025-03-22 11:07:19 · 1014 阅读 · 0 评论 -
ReactNative进阶(五十九):存量 react-native 项目适配 HarmonyOS NEXT
2024年10月22日19:00,华为在深圳举办“原生鸿蒙之夜暨华为全场景新品发布会”,主题为“星河璀璨,共见鸿蒙”。本次活动上,华为正式发布“纯血鸿蒙”系统(即),据华为常务董事、终端BG董事长余承东透露,该系统是鸿蒙诞生以来的最大一次升级。值得注意的是,是我国首个国产移动操作系统,也是继苹果iOS和安卓系统后,全球第三大移动操作系统。为保证存量APP功能在鸿蒙NEXT系统可以正常使用,需保证基于RN框架开发的存量APP功能适配鸿蒙NEXT。原创 2025-02-07 15:30:35 · 1690 阅读 · 0 评论 -
ReactNative进阶(五十四):NativeEventEmitter NativeAppEventEmitter DeviceEventEmitter 区别
NativeEventEmitter、NativeAppEventEmitter和DeviceEventEmitter是React Native中用于处理原生事件的三个不同的事件发射器(event emitter)。原创 2015-04-18 19:27:41 · 53175 阅读 · 1 评论 -
ReactNative进阶(九)build.gradle 配置详解
Gradle是一个基于JVM的构建工具,其build脚本使用groovy dsl编写。Gradle的核心在于基于Groovy丰富而可扩展的域描述语言(DSLGroovy通过声明性的语言元素将基于声明的构建推向下层,可以按你想要的方式进行组合。一个project里面可以有多个modulemodule可以是,也可以是library。RN项目中,关于gradle该文件分为项目级和模块级两种,用于描述App工程的编译规则。该文件用于描述java代码的混淆规则。原创 2021-04-13 14:43:03 · 4899 阅读 · 5 评论 -
ReactNative进阶(二):ReactNative 项目文件结构介绍
在学习一门新语言,搭建完新项目时,有必要了解下项目结构。HelloWorld|-- ios|-- img|-- public|-- scene|-- libsandroid:Android原生工程目录;ios:IOS原生工程目录;是基于javasript开发的语言,使用npm做为包管理工具,这个文件就是npm的包管理文件,主要配置项目依赖的第三方包;index.js:这个文件是IOS和Android在相应设备上打包运行的入口文件;(备注:早期项目应该是和两个单独的入口文件)原创 2021-04-22 15:42:12 · 2651 阅读 · 0 评论 -
ReactNative进阶(三):ReactNative 项目启动原理介绍
ReactNative进阶(三):ReactNative项目启动原理介绍原创 2021-04-22 15:42:41 · 2308 阅读 · 0 评论 -
ReactNative进阶(四):ReactNative 原理剖析之JS 层渲染 diff 算法
在ReactNative启动完成之后,就会加载jsbundle中的js代码,进入js层渲染。为什么讲 ReactNative JS 层渲染,重点讲 diff 算法呢?使用 React 写过 Web 和 ReactNative的,能很明显感觉到:除了组件命名不一样之外,生命周期、刷新机制等几乎是完全一样的,这也就是 Facebook 所说的“learn once, write anywhere”,只要会写 React,就能无压力同时开发 Web 和 ReactNative。而 React 框架相对于传统原创 2021-04-22 15:43:03 · 2028 阅读 · 0 评论 -
ReactNative进阶(六):ReactNative语法学习及常见问题汇总
对于第一次接触的同学,最痛苦的是什么时候使用{},什么时候使用(),当然我也经历过那段时间,为此简单总结了下。中,使用表达式的时候需要用{}包住;style= {中,在字符串中使用变量的时候,需要用{}包住;中,对象,字典需要用{}包住;style = {} , // 最外层表达式,用{}包住 {flex : 1 } , // 对象,用{}包住 < View style = {创建组件,必须要用()包住;因此只要返回组件,都需要用()。render() {原创 2021-04-22 19:31:55 · 1596 阅读 · 0 评论 -
ReactNative进阶(八):connect
普通写法原来在组件中connect连接redux的写法是:import { connect } from 'react-redux';import { start, stop, reset } from './actions';class Home extends Component { ... // dispatch一个action this.props.dispatch(reset()); ... const mapStat原创 2021-04-26 13:47:01 · 1465 阅读 · 0 评论 -
ReactNative进阶(五十八):API学习之注册组件AppRegistry
AppRegistry简介每一个应用程序的运行都需要有一个入口文件或者入口函数,而在React Native 中,AppRegistry是RN应用的入口函数。AppRegistry负责注册运行React Native应用程序的JaveScript入口,程序入口组件使用AppRegistry.registerComponent来注册。当注册完应用程序组件后,Native系统(OC)就会加载jsbundle文件并触发AppRegistry.runApplication运行应用。AppRegistry有以下方原创 2021-04-26 15:00:50 · 2079 阅读 · 0 评论 -
ReactNative进阶(十):WebView 应用详解
使用WebView组件可通过url来加载显示一个网页,也可以传入一段html代码来显示。下面对其主要属性和方法进行介绍。1. 主要属性source:在WebView中载入一段静态的html代码或是一个url(还可以附带一些header选项);:设置是否自动调整内容。bool;:设置内容所占的尺寸大小。:当网页加载之前注入一段js代码。其值是字符串形式。(默认值:无):是否开启页面加载的状态,其值为true或者false。bounces(仅iOS,默认值:true):回弹特性。如果设置为false。原创 2021-04-26 15:56:51 · 7717 阅读 · 1 评论 -
ReactNative进阶(十一):realm 数据库
realm 是一款专为移动端开发的高性能数据库,其宣称自己是最快的 react-native 数据库。realm 优点如下:简单易用;跨平台;快速,性能优越;提供高级功能。realm 核心数据引擎用 C++ 打造,并不是建立在 SQLite 之上的 ORM。因此性能就是比普通的 ORM 要快很多,甚至比单独无封装的 SQLite 还要快。同时因为是ORM,本身在设计时也针对移动设备(iOS、Android),所以简单易用,学习成本很低。一、安装依赖npm i -S realmreac原创 2021-04-26 17:20:01 · 2617 阅读 · 0 评论 -
ReactNative进阶(十二):本地存储 AsyncStorage 及 Realm 使用
前言数据持久化一直都是软件开发中重要的一个环节,几乎所有的应用都具备这一项功能;那什么是数据持久化呢?—— 说白了就是数据的本地化存储,将数据存储到本地,在需要的时候进行调用。本文介绍两种在 React-Native 中比较常用的存储方式:AsyncStorage及Realm。AsyncStorage:官方使用的存储方式,类似于 iOS 中的 NSUserDefault ,区别在于,AsyncStorage 只能存储字符串键值对,而 NSUserDefault 可以存储字符串和number。Rea原创 2021-04-26 17:39:12 · 4156 阅读 · 0 评论 -
ReactNative进阶(十四):初探 Gradle
Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。Maven的主要功能主要分为五点:依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle优于Maven的先进之处。依赖管理系统Maven为Java世界引入了一个新的依赖管理系统。在Java世界,可以用groupId、artifactId、version组成的Coordination(坐标)唯原创 2021-04-28 16:15:26 · 1798 阅读 · 0 评论 -
ReactNative进阶(一):ReactNative 学习资料汇总
序目前主流的移动跨平台技术方案大体可以分为三类,使用原生内置浏览器加载HTML5的Hybrid技术方案,采用此种方案的主要有Cordova、Ionic和微信小程序;使用JavaScript语言进行开发,然后使用原生组件进行渲染,采用此方案的主要有React Native、Weex和轻快应用;使用自带的渲染引擎和自带的原生组件来实现跨平台,采用此种方案的主要是Flutter。对于其他的浏览器方案,基本可以抛弃了,相比较React Native和Flutter,React Native和Flu.原创 2021-05-07 10:59:30 · 2508 阅读 · 0 评论 -
ReactNative进阶(七):导航组件 react-navigation
前言在RN项目开发过程中,经常会看到如下形式的路由跳转。render() { return ( <View> <Text>2</Text> <Button title = "跳转到指定的页面" onPress = {() => this.props.navigation.push('ChangePassword')} /> <Bu原创 2021-05-07 11:04:18 · 2784 阅读 · 3 评论 -
ReactNative进阶(十三):Could not resolve all dependencies for configuration ‘:app:debugRuntimeClasspath‘
在RN开发过程中,执行react-native run-android命令之后,报如下错信息:Error:Could not resolve all dependencies for configuration ':app:debugRuntimeClasspath'解决措施在项目的build.gradle 文件buildscript 和 allprojects节点同时加上 mavenCentral() google() 即可。// Top-level build file where you c原创 2021-05-07 14:37:52 · 3445 阅读 · 5 评论 -
ReactNative进阶(十五):应用 react-native-tab-navigator 实现底部导航栏
1.引入react-native-tab-navigator使用npm i react-native-tab-navigator --save引入tab库,目前最新版本为0.3.4。接着,我们在MainScreen类中将Tab控件import进来,具体代码如下:import TabNavigator from 'react-native-tab-navigator';export default class MainScreen extends Component { render() {原创 2021-05-08 10:03:20 · 2007 阅读 · 1 评论 -
ReactNative进阶(十六):组件生命周期
文章目录概述一、组件的生命周期1.1 创建阶段1.2 实例化阶段1.3 运行(更新)阶段1.4 销毁阶段二、生命周期函数详细介绍constructorgetDefaultPropscomponentWillMountrendercomponentDidMountcomponentWillReceivePropsshouldComponentUpdatecomponentWillUpdatecomponentDidUpdatecomponentWillUnmount三、完整样例四、总结概述所谓生命周期,原创 2021-05-08 15:02:43 · 2916 阅读 · 0 评论 -
ReactNative进阶(十七):RefreshControl 组件实现刷新效果
文章目录一、简介二、API三、应用示例一、简介刷新功能在数据更新的时候很常用,它对用户有一个非常明显的数据正在更新的提示信息。ReactNative中提供了RefreshControl组件来实现这个刷新功能。RefreshControl组件可以用在ScrollView或ListView内部,为其添加下拉刷新的功能。当ScrollView处于竖直方向的起点位置(scrollY: 0),此时下拉会触发一个onRefresh事件。二、API它是跨平台的组件,提供的属性如下://视图下拉开始刷新时调原创 2021-05-10 10:35:54 · 2319 阅读 · 6 评论 -
ReactNative进阶(十八):[Android] TypeError: expected dynamic type int64‘, but has type ‘null‘
文章目录问题描述问题分析解决措施问题描述在RN开发过程中,项目运行在android平台时报如下错误信息:TypeError: expected dynamic type int64', but has type 'null'初次接触该类型问题,一脸懵。问题分析{ (()=>{ return this.state.data.length? [<Text key={"title"} style={{textAlign: "center", color: "#原创 2021-05-10 12:26:06 · 1297 阅读 · 5 评论 -
ReactNative进阶(十九):React Native 按钮 Touchable 系列组件使用详解
文章目录前言TouchableWithoutFeedback使用详解TouchableHighlight使用详解TouchableOpacity使用详解TouchableNativeFeedback使用详解前言在做RN App开发过程中离不了用户交互,在React Native中没有专门的按钮组件。为了让视图能够响应用户的点击事件,我们需要借助Touchablexxx组件,来包裹我们的视图。为什么说是Touchablexxx呢,因为它不只是一个组件,而是一组组件,以下四个组件都可以用来包裹视图来响应原创 2021-05-10 15:59:54 · 2052 阅读 · 0 评论 -
ReactNative进阶(二十):Could not connect to development server
文章目录问题描述问题分析解决方法问题描述在RN Android开发过程中,测试机突然报如下错误信息:问题分析红屏给出的解决方案翻译过来如下:请按照以下的步骤来修复此问题:确保包服务器在运行确保你的设备或者模拟器连接着电脑,并且手机打开了USB调试模式,然后在cmd中运行adb devices来查看已经连接好的设备列表确保飞行模式是关闭的如果是使用真机来开发,输入 adb reverse tcp:8081 tcp:8081来检查设备解决方法1、首先检查包服务器是否运行正常。原创 2021-05-10 17:47:37 · 1555 阅读 · 2 评论 -
ReactNative进阶(二十二):点击事件.bind(this)引发的思考
文章目录前言React中bind方法的选择前言在React或React-native的点击事件中,会经常用到bind(this)。比如说一个简单的React-native点击组件:export default class AwesomeProject extends Component { constructor(props){ super(props); this.state = { } } handleClick () { console.log('原创 2021-05-11 10:15:49 · 1615 阅读 · 2 评论 -
ReactNative进阶(二十四):react-native-scrollable-tab-view 标签导航器组件详解
文章目录属性及方法介绍Demo属性及方法介绍renderTabBar(Function:ReactComponent)TabBar的样式,系统提供了两种默认的,分别是DefaultTabBar和ScrollableTabBar。注意:每个被包含的子视图需要使用tabLabel属性,表示对应Tab显示的文字。DefaultTabBar:Tab会平分在水平方向的空间。ScrollableTabBar:Tab可以超过屏幕范围,滚动可以显示。tabBarPosition(String,默认原创 2021-05-11 17:26:02 · 4034 阅读 · 5 评论 -
ReactNative进阶(二十五):ScrollView 滚动视图组件详解
文章目录属性StyleScrollView 必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作)。要给 ScrollView 一个确定高度的话,要么直接给它设置高度(不建议,要么确定所有的父容器都有确定的高度。一般来说我们会给 ScrollView 设置 flex: 1, 以使其自动填充父容器的空余空间,但前提条件是所有的父容器本身也设置了flex或者指定了高度,否则就会导致无法正常滚动,你可以使用元素查看器来查找具体哪一层高度不正确。原创 2021-05-13 09:32:34 · 4564 阅读 · 2 评论 -
ReactNative进阶(二十六):父子组件函数调用
需求在子组件执行某个操作的时候,需要其去调用父组件中的某个函数或者改变父组件中的某个参数。实现方式如下:子组件export default class Child extends PureComponent { static propTypes = { onItemClick: React.PropTypes.func, } info = '子组件的内容'; itemClick(index) { // 可以将子组件中的某个内容传出给父组件 if (this.原创 2021-05-17 18:28:00 · 1839 阅读 · 0 评论 -
ReactNative进阶(二十七):createMaterialTopTabNavigator 顶部导航组件
文章目录API原型参数说明RouteConfigstabBarOptions属性拓展阅读API原型createMaterialTopTabNavigator(RouteConfigs,TabNavigatorConfig)参数说明RouteConfigs路由名称到路由配置的一个映射。示例如下:{ Home:{ //这是一个首页路由配置项 screen:Home,//必填项 Home是react的一个组件 path:'',//选填项深度连接或webAPP中起作用 naviga原创 2021-05-18 09:29:36 · 1773 阅读 · 0 评论 -
ReactNative进阶(二十九):BloC 模式
文章目录什么是BloC模式?拓展阅读什么是BloC模式?BloC【Business Logic Component】模式是paolo soares 和 cong hui 在2018年Google dartconf上提出的,具体的视频你可以参考YouTube.从视频中可以看到paolo soares用一个及其简单的例子阐述了传统写法的问题:业务逻辑和UI组件糅合在一起。不方便测试,不利于单独的测试业务逻辑部分。不能更好的重用业务逻辑代码,体现在,如果网络请求的逻辑有所变动的话,加原创 2021-05-18 10:16:24 · 2197 阅读 · 0 评论 -
ReactNative进阶(三十):Component、PureComponent 解析
文章目录前言区别PureComponent缺点PureComponent优势前言React.PureComponent 与 React.Component 几乎完全相同,但 React.PureComponent 通过props和state的浅对比来实现 shouldComponentUpate()。在PureComponent中,如果包含比较复杂的数据结构,可能会因深层的数据不一致而产生错误的否定判断,导致界面得不到更新。如果定义了 shouldComponentUpdate(),无论组件是否是原创 2021-05-19 16:53:43 · 1899 阅读 · 0 评论 -
ReactNative进阶(三十一): IoC 框架 InversifyJS 解读
文章目录简介为什么要有 InversifyJS?目标安装应用示例步骤 1: 声明接口和类型步骤 2: 使用 @injectable 和 @inject 装饰器声明依赖步骤 3: 创建和配置容器步骤 4: 解析依赖拓展阅读简介InversifyJS ,一个强大又轻量的控制反转容器,提供给JavaScript 和 Node.js 应用使用,使用TypeScript编写。InversifyJS 是一个轻量的 (4KB) 控制反转容器 (IoC),可用于编写 TypeScript 和 JavaScript原创 2021-05-21 10:04:10 · 2264 阅读 · 0 评论 -
ReactNative进阶(三十二):前端构建工具--Yeoman
就帮助我们新建立一个项目,而且项目已经填充了不少代码,我们可以沿着别人的已经搭建好的构架来编写业务即可,这对很多新手来说是非常好的一种提高方式,所以建议大家选star多的 —代码风格好,文件夹规划清晰,脚手架软件用于实现项目中多种不同的工具和接口的协同使用,优化项目的生成过程。的工作流,这个流是由一个强大的,固定的客户端组建,包含工具和框架帮助开发者快速建立强大的。为了降低项目的维护成本,将要求的组件结构和必要的使用说明生成组件模板,使用。工具来直接生成,当项目的体积越来越大时,就会体会到这种方式的好处。原创 2021-05-21 15:12:28 · 1536 阅读 · 8 评论 -
ReactNative进阶(三十三):Mac 下 homebrew 的安装和 brew 命令的使用
文章目录前言安装 brew 命令使用 brew 安装软件使用 brew cask 一站式安装brew 的更多用法废弃的用法拓展阅读前言Homebrew 是 mac 下的包管理器,基于命令行模式,使用命令 brew 管理软件。类似 ubuntu 下的 apt-get 、fedora 下的 yum。安装 brew 命令打开mac的终端软件,输入下面的内容,然后回车:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebre原创 2021-05-21 19:32:54 · 1780 阅读 · 2 评论 -
ReactNative进阶(三十五):应用脚手架 Yo 构建 RN 页面
在前期博文《ReactNative进阶(三十二):前端构建工具–Yeoman》中将脚手架yo安装成功,本篇博文主要讲解如何利用yo提供的代码自动生成功能生成项目代码。原创 2021-05-23 15:00:57 · 1756 阅读 · 0 评论 -
ReactNative进阶(三十八):Android ndk abiFilters 详解
一、前言二、ABI 是什么三、为何设置ndk的abiFilters四、如何配置 gardle五、ABI支持详解六、支持建议七、拓展阅读一、前言Android 系统本质是一个经过改造的 Linux 系统,so库是Linux系统上使用的共享库(类似windows上的dll)。最初,Android 系统只支持 ARMv5 的 CPU 构架,随着 Android 系统的发展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 .原创 2021-06-01 15:44:24 · 3485 阅读 · 4 评论 -
ReactNative进阶(三十七):应用 SectionList 实现分组列表
SectionList简述ReactNative长列表数据组件一共有三个:ListView 核心组件,数据量大时性能较差,占用内存持续增加,故诞生FlatList组件。FlatList 用于替代ListView,支持下拉刷新和上拉加载。SectionList 高性能的分组列表组件。其中,SectionList支持下面的常用功能:完全跨平台;支持水平布局模式;行组件显示或隐藏时可配置回调事件;支持单独的头部组件;支持单独的尾部组件;支持自定义行间分隔线;支持下拉刷新;支持上拉原创 2021-06-01 14:45:20 · 1785 阅读 · 0 评论 -
ReactNative进阶(三十九):DeviceEventEmitter 实现发送和监听消息
移动端开发过程中,页面间信息传递是常见的应用场景。注册、发送消息方式如下:DeviceEventEmitter.emit('自定义名称',发送数据);消息监听方式如下:DeviceEventEmitter.addListener('名称',(events) ={使用数据events});例如,在A页面注册和发送消息:import {DeviceEventEmitter} from 'react-native';let param = {taobaoBind:false,walletSum:原创 2021-06-01 16:55:41 · 6119 阅读 · 0 评论 -
ReactNative进阶(四十):应用 ListView 实现分组列表
前言ListView常用属性ListView高阶特性ListView使用Demo拓展阅读前言在前期博文中讲解了应用SectionList实现分组列表,本文主要讲解ReactNative长列表数据展示核心组件ListView ,该组件在数据量大时性能较差,占用内存持续增加,故诞生了FlatList组件。ListView常用属性ScrollView 相关属性样式全部继承属性名(类型)说明dataSource 【ListViewDataSource】设置ListView的数据源.原创 2021-06-01 19:31:48 · 1512 阅读 · 0 评论 -
ReactNative进阶(四十一):应用 FlatList 实现分组列表
功能简介属性说明方法集合简单应用示例高阶应用示例拓展阅读功能简介FlatList高性能的简单列表组件,支持下面这些常用的功能:完全跨平台。支持水平布局模式。行组件显示或隐藏时可配置回调事件。支持单独的头部组件。支持单独的尾部组件。支持自定义行间分隔线。支持下拉刷新。支持上拉加载。支持跳转到指定行(ScrollToIndex)。如果需要分组/类/区(section),请使用SectionList。FlatList和SectionList都是以VirtualizedList.原创 2021-06-01 20:26:42 · 1994 阅读 · 0 评论