2019独角兽企业重金招聘Python工程师标准>>>

今天完成了我的第一个react-native项目的封包,当然其间各种环境各种坑,同时,成就感也是满满的。这里总结一下使用react-native的一些入门级重要点(不涉及环境)。注意:阅读需要语法基础: ES6 、react 、JSX

我对react-native的理解简而言之就是 :react的语法 + native的组件

组件的创建声明

class HelloWorldApp extends Component {constructor(props) {super(props);this.state = {};}render() {return (<Text>Hello world!</Text>);}
}

上面代码定义了一个“类”,可以看到里面有一个constructor方法,这就是构造方法,而this关键字则代表实例对象。当你在其他的组件中调用这个组件时,就会实例化这个“类”(即组件)。

注意:组件名需要大写

组件的导出、引用与注册

在ES6中,新增了import和export俩个关键字来导入导出模块。react-native的组件也是采用的这俩个关键字。

俩种方式:

第一种:

导出:
export default class HelloWorldApp extends Component{render() {return (<Text>Hello world!</Text>);}
}导入:
import HelloWorldApp from "../.."

第二种:

导出:
class HelloWorldApp extends Component {render() {return (<Text>Hello world!</Text>);}
}export {HelloWorldApp}导入:
import { HelloWorldApp } from "../.."
  1. 后缀名自动获取(文件会获取拥有与之相应后缀名的文件)

    在组件模块的导入过程中,如果这个模块是分设备的,也就有俩个文件:xxx.android.js和xxx.ios.js,这些后缀(android和ios)是不需要的,在不同的设备环境中,它自动获取相应后缀名的文件,即ios包会自动获取xxx.ios,android包会自动获取xxx.android。

  2. 后缀名自动忽略(文件会自动忽略拥有与之不相应后缀名的文件)

    一个ios和android的公共模块文件,即共用代码模块文件,命名不能加ios和android后缀,否则,ios包取不到有androis后缀的文件,android取不到有ios后缀的文件。

实例解释上述:
现在有以下五个文件:

index.ios.js

index.android.js

say.android.js

say.ios.js

HelloWorldApp.android.js

我们想要分别在index.ios.js 和 index.android.js引入其他三个模块。我们只要在index.ios.js 和 index.android.js文件中如下写法就行:

//这里,index.ios.js会自动获取say.ios.js的模块;index.android.js会自动获取say.android.js的模块import 模块名 from "./say";//这里,HelloWorldApp.android.js 是一个公共模块,index.android.js能成功获取到./HelloWorldApp;但是index.ios.js则无法获取到HelloWorldApp模块,因为index.ios.js会忽略android后缀名的模块文件import 模块名 from "./HelloWorldApp"

react组件的生命周期

image

项目中使用组件的时候,纠结于componentWillMount,componentDidMount...,直到看到这张图豁然开朗(so,图是盗的)。需要注意的是,这张图应该比较老了,其中的getDefaultProps和
getInitialState这俩个函数是ES5的写法了,ES6语法中,constructor方法中代替了getDefaultProps/getInitialState,我们可以在其内直接初始化props和state。

生命周期:

  1. 实例化(初始化)

    • constructor

      设置默认的props->设置默认的state

    • componentWillMount

      完成渲染之前执行,此时可以设置state

    • render

      创建虚拟DOM,此时不能修改state

    • componentDidMount

      真实的DOM渲染完毕,此时可以更改组件props及state

  2. 存在期:(这个时候的主要行为是状态的改变导致组件更新)

    • componentWillReceiveProps

      组件接收到新的props,此时可以更改组件props及state

    • shouldComponentUpdate

      操作组件是否应当渲染新的props或state,返回布尔值,首次渲染该方法不会被调用。

    • componentWillUpdate

      接收到新的props或者state后,进行渲染之前调用,此时不允许更新props或state。

    • render

      创建(更新)虚拟DOM

    • componentDidUpdate
      组件真实的DOM更新完成

  3. 销毁期:

    • componentWillUnmount
      组件被移除之前,主要用于做一些清理工作,比如事件监听

react 的 props 和 state

  1. props(属性)

    当我们调用这些组件时,我们如果为每一个组件传递了不同的属性,这个属性就是props。比如下例中,我们调用了HelloWorldApp组件,并为其设置了一个date属性,则我们可以在HelloWorldApp的组件里,通过this.props.date来获取这一属性值。

    <HelloWorldApp date = {2016}>
    
  2. state(状态)

    state需要在constructor中初始化,然后通过调用setState方法修改。
    通过上面的组件生命周期图,我们可以看出,state是一个状态机,state的改变会引起shouldcomponentupdate、componentwillupdate、rendner...一系列方法的执行,视图会重新渲染。所以,如果需要动态地改变组件的数据或试图,请操作state。

react组件之间的通信

  1. 子组件接收父组件的改变信号

    简单:当父组件改变时,直接向子组件传递props

  2. 父组件接收子组件的改变信号
    在父组件中定义一个方法,并通过props传递给子组件,子组件改变时,通过调用这个父组件传递过来的方法,从而实现在父组件中执行该方法。

  3. 非父子关系组件之间的通信

    RCTDeviceEventEmitter模块:它有俩个方法:emit和addListener,一个发送,一个接收。

    RCTDeviceEventEmitter.emit(notifName,param);

    RCTDeviceEventEmitter.addListener(notifName,callback)

native 事件对象

在项目中,遇到一个控制scrollview组件滚动的需求,需要获取当前滚动的坐标,当时找了好久的文档,没找到解决方案,后来发现可以通过这样来传入一个事件对象

<ScrollView ref='scrollView' onScroll = {(e) => {this.scrollhShow(e);}}>

然后在函数中读取:

scrollhShow(e) {console.log(e.nativeEvent)
}

当当当当,我要的滚动视图的坐标值就在里面了。

原文链接:https://www.cnblogs.com/yzg1/p/5985525.html,转载请注明原创!

更多

学习React Native必看的几个开源项目

手把手教你React Native 实战之开山篇《一》

react-native技术的优劣

如果你觉得此文对您有所帮助,欢迎随时撩我 。微信公众号:终端研发部

技术+职场

转载于:https://my.oschina.net/u/3877260/blog/1825693

第一次react-native项目实践要点总结相关推荐

  1. 技术实践丨React Native 项目 Web 端同构

    摘要:尽管 React Native 已经进入开源的第 6 个年头,距离发布 1.0 版本依旧是遥遥无期."Learn once, write anywhere",完全不影响 Re ...

  2. React native 项目进阶(redux, redux saga, redux logger)

    之前利用知乎日报的api写了react-native的一个入门项目,传送文章地址React Native 项目入门和源码地址RN入门项目源码,目前github上的代码已经在原文的基础上增加了新的功能, ...

  3. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 "8小时内拼工作,8小 ...

  4. React Native 项目常用第三方组件汇总

    React Native 项目常用第三方组件汇总 https://www.jianshu.com/p/d9cd9a868764?utm_campaign=maleskine&utm_conte ...

  5. vscode 连接夜神模拟器 运行 react native项目 (很简单的方法)

    前言:我这种方式不需要过多配置,只是需要先启动Android studio ,之后再启动vsCode 准备阶段:下载夜神模拟器 1. 开启夜神服务 进入到夜神安装的bin目录下,执行 nox_adb. ...

  6. React Native 项目整合 CodePush 完全指南

    作者 | 钱凯 杏仁移动开发工程师,前嵌入式工程师,关注大前端技术新潮流. 本文使用的环境: React@16.3.1 React Native@0.55.4 react-native-code-pu ...

  7. 如何高效管理 React Native 项目中的图片资源

    本文为 Marno 原创,转载必须保留出处! 公众号[ Marno ],关注后回复 RN 加入交流群 React Native 优秀开源项目大全:http://www.marno.cn 前言 刚开始写 ...

  8. react native项目改名(仅针对android)

    我们在创建react native新项目时,都会使用react-native init 工程名 来初始化项目.有时候,我们仅仅是想调试一个小功能,又不想影响以前的项目.这种情况下,我们首先想到的是,拷 ...

  9. React Native项目配置路由和选项卡导航__React Navigation的使用

    React Native 配置路由 在网上看了很多例子跟着写,发现都不行,发现之前的写法都已经弃用了,跟着官方一步步来吧. 参考官方文档:React Navigation 先创建好项目: npx re ...

最新文章

  1. 十万浙企上云 阿里云崛起的最大征候?
  2. Java几种常见排序算法与代码实现
  3. LeetCode Design Twitter
  4. 《基于张量网络的机器学习入门》学习笔记1
  5. [NOIP-S 2020]游记(附考前注意事项)
  6. V-Play入门手册3-如何编写高效的代码?
  7. 在线动态几何编辑器 GeometryEditor
  8. NLP ---文本情感分析
  9. 机器视觉运动控制一体机应用例程|橡胶密封圈检测
  10. Heterogeneous Graph Attention Network翻译
  11. 小白转行学IT入职BAT应该怎么做
  12. 最新SOCKS5代理服务器 socks5代理ip地址
  13. Macbook Pro(M1芯片)腾讯会议无法使用共享屏幕功能
  14. 一顿操作猛如虎,一看还是二百五
  15. ❤️爆肝新一代大数据存储宠儿,梳理了2万字 “超硬核” 文章!❤️
  16. mysql错误合集_mysql错误合集
  17. TOGAF之架构标准规范(一)
  18. CarSim仿真快速入门(一)
  19. windows分屏设置鼠标左右
  20. GetGestureInfo 函数-中文整理

热门文章

  1. python流程控制-python之流程控制
  2. python可以做什么 知乎-python能做什么知乎
  3. 自学python当黑客-为什么黑客都用Python
  4. python3.6.5安装教程-Ubuntu16.04安装python3.6.5步骤详解
  5. python的快速入门-Python如何快速入门的基础知识
  6. python真的这么厉害吗-Python为什么这么厉害?——Python ,能用来做什么
  7. python软件是免费的吗-python软件都是免费的吗
  8. select、poll、epoll之间的区别总结[整理]
  9. acme自动证书申请
  10. 启动tomcat报错Caused by: org.apache.catalina.LifecycleException: No UserDatabase component