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
})


目录
相关文章
|
30天前
|
算法 测试技术 开发工具
编写高效技术文档的艺术:C++项目实践指南
编写高效技术文档的艺术:C++项目实践指南
79 0
|
9月前
|
数据可视化 算法 前端开发
一文吃透低代码平台源代码交付的重要性(避坑指南)
一文吃透低代码平台源代码交付的重要性(避坑指南)
201 0
|
10月前
|
移动开发 人工智能 前端开发
【微信小游戏开发 一】项目调研
【微信小游戏开发 一】项目调研
132 0
|
前端开发 程序员 开发者
开发者要想走更好的出路必须选全栈工程师这条路吗?
虽然说“技多不压身”,“术业有专攻”,但是作为程序员,尤其是做业务场景的开发者来说,并不是会的面越广越好,而且现在的技术迭代速度太快,不管是前端领域还是后端领域,技术栈或者技术框架更新迭代的周期越来越短、越来越快,学习成本越来越大,尤其是要做资深的全栈工程师,需要学的知识是非常的多,而且还需要各个方面的时间沉淀,考虑到人的精力会随着年龄的增长而递减,成反比例,所以虽然全栈工程师有着丰富的工作从业经验和经历,但是如果想要具备各个方面都差不多,难度是很大的。
162 1
开发者要想走更好的出路必须选全栈工程师这条路吗?
|
存储 资源调度 自然语言处理
浅谈前端工程化的发展以及相关工具介绍
随着发展的逐步发展,作为工程师除了需要关注需要写的⻚面,样式和逻辑之外,还需要面对日益复杂 的系统性问题,比如模块化文件的组织、ES6 JS 文件的编译、打包压缩所有的 JS 代码、优化和合并图片静态资源等等事情。
|
测试技术 iOS开发 Python
热饭的测开成果盘点第二十六期:IOS自动化平台
热饭的测开成果盘点第二十六期:IOS自动化平台
热饭的测开成果盘点第二十六期:IOS自动化平台
|
移动开发 前端开发 JavaScript
ReactNative 学习成果总结(中)
ReactNative 学习成果总结(中)
191 0
ReactNative 学习成果总结(中)
|
移动开发 JSON 前端开发
ReactNative 学习成果总结(下)
ReactNative 学习成果总结(下)
231 0
ReactNative 学习成果总结(下)
|
Web App开发 JavaScript 测试技术
技术分享 | 学做测试平台开发-Vuetify 框架
技术分享 | 学做测试平台开发-Vuetify 框架
|
敏捷开发 运维 监控
技术分享 | 想测试入门就必须要懂的软件开发流程
技术分享 | 想测试入门就必须要懂的软件开发流程