ReactNative 学习成果总结(上)

简介: ReactNative 学习成果总结(上)

RNAPPGithub


学习课程:


《双平台真实开发GitHub App React Native技术全面掌握》399 大洋,含着泪吃了一个月泡面..

Github 代码库:https://github.com/ReverseScale/RNAPPGithub.git


知识点:


  • 1.整理 ReactNative 网络封装及常用的三方模块
  • 2.ReactNative 的 AsyncStorage数据库技术、离线缓存
  • 3.ReactNative 的数据 DAO 层设计技巧,数据状态实时更新
  • 4.ReactNative 的代码提取技巧,组合模式应用技巧,数据异步刷新与动态添加
  • 5.ReactNative 的版本升级、数据统计、社会化分享、第三方登录,热更新等
  • 6.ReactNative 项目发布前的优化、打包与上线


目录结构:



生命周期及使用场景

常用方法:

  • constructor:
  • componentWillMount:
  • render:
  • componentDidMount:
  • componentWillReceiveProps:
  • shouldComponentUpdate:
  • componentWillUpdate:
  • componentDidUpdate
  • componentWillUnmount:


1.constructor:

在组件创建的时候调用一次,这个方法进行this.state初始化状态机。

constructor(props) {
     super(props);  // 初始状态
     this.state = {
         isShow:true
     };
}


2.componentWillMount:

在组件生命周期中只会被执行一次,在初始渲染(render函数)前被执行。 注意:

  • 如果这个函数通过setState函数修改状态机变量,RN框架不会额外执行渲染(界面刷新)
  • 如果子组件也有componentWillMount函数使用,会在父组件之后调用
  • 需要从本地存储中读取数据用于显示,常用这个函数


3.render:

该函数组件必有的,通过返回JSX或其他组件来构成DOM,换言之,就是组件的核心渲染过程。


4.componentDidMount:

在React Native组件的生命周期中,这个函数只会被执行一次,它在初始渲染完成后会马上被调用。在这之后开发者可以通过子组件的引用来访问,操作任何子组件。 如果RN组件的子组件也有componentDidMount函数,并会在父组件的componentDidMount函数之前被调用。

  • 常用来网络请求数据


5.componentWillReceiveProps:

在React Native组件的初始渲染完成后,props改变时,这个函数被调用,参数是个新的props。


6.shouldComponentUpdate:

React Native组件的初始渲染执行完成后, RN组件接收到新的state或者props时这个函数会调用。

  • 通过这个函数阻止无必要的重新渲染,是提高React Native应用程序性能的一大技巧。


7.componentWillUpdate:

初始渲染完成后,重新渲染前会调用这个函数。

  • 这个函数不能通过this.setState再次改变状态机变量的值。
  • 组件更新时调用。


8.componentDidUpdate

RN组件初始渲染完成后,RN框架在重新渲染RN组件完成后调用。 参数是渲染前的props和state。

  • 组件更新完毕时调用。


9.componentWillUnmount:

ReactNative 组件被卸载前会调用,通常做一些清理内容。


项目介绍


双平台效果预览:


image.png


React Native是React在移动端的跨平台方案。如果想更快地理解和掌握React Native开发,就必须先了解React。

React是FaceBook开源的一个前端框架,它起源于 Facebook 的内部项目,并于 2013 年 5 月开源。因为React 拥有较高的性能,代码逻辑非常简单,所以越来越多的人已开始关注和使用它,目前该框架在Github上已经有7万+star。

ReactNative 技术导图:


image.png


组件化


React采用组件化的方式开发,通过将view构建成组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。有一句话说的很形象:在React中,构建应用就像搭积木一样。


组件化特征

React认为一个组件应该具有如下特征:

  • 可组合(Composeable):一个组件易于和其它组件一起使用,或者嵌套在另一个组件内部。如果一个组件内部创建了另一个组件,那么说父组件拥有它创建的子组件,通过这个特性,一个复杂的UI可以拆分成多个简单的UI组件;
  • 可重用(Reusable):每个组件都是具有独立功能的,它可以被使用在多个UI场景;
  • 可维护(Maintainable):每个小的组件仅仅包含自身的逻辑,更容易被理解和维护;


image.png


封装好的导航栏就可以被称之为一个组件,它符合上述三个特点:

  • 可组合:可以将导航栏组件放在页面组件中作为页面组件的子组件。而且在导航栏组件的内部,也有按钮组件等子组件。
  • 可重用:如果封装好了该组件,就可以放在任意需要导航栏的页面(组件)使用,也可以放在其他项目中使用。
  • 可维护:因为具有独立的功能和展示逻辑,所以便于定位和修改。


组件的属性与状态

在React Native(React.js)里,组件所持有的数据分为两种:

  • 属性(props):组件的props是不可变的,它只能从其他的组件(例如父组件)传递过来。
  • 状态(state):组件的state是可变的,它负责处理与用户的交互。在通过用户点击事件等操作以后,如果使得当前组件的某个state发生了改变,那么当前组件就会触发render()方法刷新自己。


image.png


我们可以看到这个页面有两个子页面,一个是‘最热’页面(组件),另一个是‘趋势‘页面(组件)。那么这两个组件都有什么props和state呢?

1.props: 由于props是从其父组件传递过来的,那么可想而知,props的声明应该是在当前组件的父组件里来做。在React Native中,通常props的声明是和当前组件的声明放在一起的:

//最热子页面
<FavoriteTabPage  {...this.props} tabLabel='最热' flag={FlAG_STORAGE.flag_popular}/>
//趋势子页面
<FavoriteTabPage  {...this.props} tabLabel='趋势' flag={FlAG_STORAGE.flag_trending}/>

在这里,收藏页面是父组件,而最热页面和趋势页面是其子组件。在收藏页面组件里声明了最热页面和趋势页面的组件。


而且我们也可以看到,最热页面和趋势页面组件都用的是同一个组件:FavoriteTabPage,而这两个页面的不同点只在于传入的两个props的不同:tabLabel和flag。


而在FavoriteTabPage组件内部,如果想调用flag这个props,可以使用this.props.flag来调用。


2.state:

下面是最热和趋势页面的组件:

class FavoriteTabPage extends Component{
//组件的构造方法
constructor(props){
    super(props);
    this.state={
    dataSource:new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!==r2}),isLoading:false,
    }
}

这里面定义了两个state:

  • dataSource:列表的数据源
  • isLoading:是否正在刷新

这两个state都是将来可能经常变化的。比如在网络请求以后,列表的数据源会被替换掉,这个时候就要调用:

this.setState({
      //把新的值newDataArr对象传给dataSource
      dataSource:newDataArr
})


目录
相关文章
|
开发者 Python
新手困扰?该如何了解github的热门趋势和star排行?
新手困扰?该如何了解github的热门趋势和star排行?
803 0
|
数据采集 JSON 前端开发
设计稿转代码利器:Design2Code
【2月更文挑战第13天】设计稿转代码利器:Design2Code
1030 2
设计稿转代码利器:Design2Code
|
前端开发 JavaScript API
我明白了,看哲波老师react设计哲学的观后感
react 是一个视图层的类库,主要是做dom渲染和响应事件的事情,如果想更高的把控它,可以有脱离基础语法束缚的哲学,从而能够站的更高。
540 0
我明白了,看哲波老师react设计哲学的观后感
|
SQL 存储 关系型数据库
关于数据导入,教你几招
我们知道,数据库是存放数据的仓库。日常我们使用数据库也是为了存储数据,和数据库打交道总免不了要进行数据导入工作。工作中也可能遇到各种不同的数据导入需求,本篇文章主要分享下数据导入相关的小技巧,希望你能学到几招。
500 0
关于数据导入,教你几招
|
存储 JSON NoSQL
Redis的基本知识
简单了解一下Redis
266 0
Redis的基本知识
|
负载均衡 网络协议 Java
虎牙直播在微服务改造方面的实践和总结
相比文字和图片,直播提供了人与人之间更丰富的沟通形式,其对平台稳定性的考验很大,那么倡导“以技术驱动娱乐”的虎牙直播(以下简称“虎牙”)是如何在技术上赋能娱乐,本文将为您介绍虎牙在DNS、服务注册、CMDB和服务配置中心等方面的实践。
7467 0
|
Docker 容器 Python
Docker网络管理机制实例解析+创建自己Docker网络
实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开发的容器添加至自己新建的网络,提高Docker网络安全和通信. 1.给自己的docker (Dcoker1.12GA)容器起个名称 给docker名称的好处是: - 容易记 - 可以通过特殊命令,使得名
1871 0
|
18天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
下一篇
开通oss服务