react native简单入门

简介: react native简单入门

react基础


 基本组件


import React from 'react';
export default class App extends React.Component {
  constructor(props) {
    super(props);
    // 初始化state
  }
  componentDidMount() {
    // 数据请求
  }
  componentWillReceiveProps() {
    // 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用
  }
  componentWillUnmount() {
    // 销毁长链接等本组件占用资源的操作
  }
  render() {
    // 注意render一个组件
    return (
      <div></div>
    )
  }
}


react生命周期


只执行一次: constructor、componentWillMount、componentDidMount 执行多次:render 、子组件的componentWillReceiveProps、componentWillUpdate、componentDidUpdate 有条件的执行:componentWillUnmount(页面离开,组件销毁时) 不执行的:根组件(ReactDOM.render在DOM上的组件)的componentWillReceiveProps(因为压根没有父组件给传递props)

530b71e4f9b3f6d4d8890b998720763b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg


props


组件的属性,可以为任意类型。主要的用途:

父组件向子组件传递数据 父组件向子组件传递调用函数,用来通知父组件消息。 用来作为子组件逻辑判断的标示,渲染的样式等 children用来作为子组件的部分视图。


state


在constructor中初始化该组件的state,之后通过this.setState({})修改state。setState所做的修改是合并修改,意思是setState中的对象会和之前的state做合并。 每次修改完状态后,稍后会执行render重新渲染。

import React from 'react';
export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 1
    }
  }
  add() {
    let { count } = this.state;
    count++;
    this.setState({
      count: count
    });
  }
  sub() {
    let { count } = this.state;
    count--;
    this.setState({
      count: count
    });
  }
  render() {
    return (
      <div>
        <div>{this.state.count}</div>
        <Button onClick={() => this.add()}>Add</Button>
        <Button onClick={() => this.sub()}>Sub</Button>
      </div>
    )
  }
}

渲染 数据展示 用{}包裹数据

循环

{
  [1,2,3,4].map(item => {
    return <div>{item}</div>
  })
}

条件判断

{ flag && <div>测试</div>}
{ flag ? <div>测试</div> : <div>测试2</div>}


react native


基本组件介绍


View

相当于html的div,块容器


Image

图片展示组件,常用属性如下:


source

source={{uri: "XXX"}} 加载网络图片, 必须设置宽和高才能展示。在展示图片前,最好判断XXX是否存在

source={require("XXX")} 加载本地图片,XXX为本地图片相对地址

应该封装一个Image组件,用来处理onError的错误和网络图片缓存


TouchableOpacity

用于写按钮的组件。常用属性如下:(此组件与TouchableHighlight的区别在于并没有额外的颜色变化,更适于一般场景)


activeOpacity

指定封装的视图在被触摸操作激活时以多少不透明度显示(通常在0到1之间)

onPress

TouchableHighlight

用于写按钮的组件,常用属性如下:


activeOpacity

指定封装的视图在被触摸操作激活时以多少不透明度显示(通常在0到1之间)


underlayColor

有触摸操作时显示出来的底层的颜色


onPress

Text

显示文字的组件


ellipsizeMode

取值(‘head’, ‘middle’, ‘tail’, ‘clip’)


head:从文本的开头进行截断,并在文本的开头添加省略号,例如:…xyz。

middle :从文本的中间进行截断,并在文本的中间添加省略号,例如:ab…yz。

tail:从文本的末尾进行截断,并在文本的末尾添加省略号,例如:abcd…。

clip :文本的末尾显示不下的内容会被截断,并且不添加省略号,clip只适用于iOS平台。

numberOfLines

限制最多显示的行数


onPress

TextInput

输入框组件


value

onChangeText

underlineColorAndroid="transparent"

TextInput在安卓上默认有一个底边框,同时会有一些padding。如果要想使其看起来和iOS上尽量一致,则需要设置padding: 0,同时设置underlineColorAndroid="transparent"来


去掉底边框

placeholder

placeholderTextColor

onBlur

当文本框失去焦点的时候调用此回调函数。

onFocus

当文本框获得焦点的时候调用此回调函数。


Modal

ScrollView

horizontal

当此属性为true的时候,所有的子视图会在水平方向上排成一行,而不是默认的在垂直方向上排成一列。默认值为false。

showsHorizontalScrollIndicator

当此属性为true的时候,显示一个水平方向的滚动条。


FlatList

data

数据

renderItem

每一项的渲染组件

onEndReached 当列表被滚动到距离内容最底部不足onEndReachedThreshold的距离时调用

onEndReachedThreshold

决定当距离内容最底部还有多远时触发onEndReached回调


keyExtractor

item的key

ref this._list.scrollToOffset({x: 0, y: 0})

Alert

StyleSheet

样式定义StyleSheet.create


Dimensions

获取屏幕尺寸

Dimensions.get('window').height

Dimensions.get('window').width


布局


flex布局 Flex 布局教程:语法篇 绝对定位 flex布局一般都是对内容组件进行操作。

样式编写

<View style={styles.container}></View>
const styles = StyleSheet.create({
  container: {
    height: 100
  }
})

宽/高无单位,这里的1代表的是逻辑像素点


数据请求介绍


在services文件夹中进行定义,在其他页面引用调用。参照SpectrumService的编写。


路由编写


在app.js中定义路由 <NavScenekey="SpectrumSearch"component={GenealogySearch}renderRightButton={props=><GenealogySearchBoxpreKey={props.preKey}/>}/>


key为该路由标识


component 为该路由展示的组件 title为导航栏标题 renderRightButton可重写右侧按钮 导航栏在路由组件中定义


路由跳转


router文件定义了三个跳转方法,jump, jumpRNApp, jumpApp jump代表正常的RN页面之间跳转 jumpRNApp代表RN页面之间需要跨路由,并且重新启动一个RN实例,一般用于首页跳转到其他RN页面 jumpApp代表跳转到原生App的页面

与App的交互

startActivity 跳转到APP某个路由 finishActivity 结束当前RN页面 getUserInfo 获取用户信息 AppEventListener 监听App的调用,包括路由跳转和重新加载 日志记录 通过引入services中的logger,调用其方法进行日志输出。方法有info, debug, warn, error四种,通过logger.error(tag, {})调用,tag为字符串。


调试


通过console.log输出打印,在XCode/android studio控制台查看对应的输出。 通过Alert.alert弹框,进行调试。 rn基本命令介绍 npm start 启动服务 npm run startWithNoCache清空缓存启动服务 npm run build 打包 npm install 依赖安装 npm run reinstall 重新安装依赖 切记不要修改将npm5安装依赖后的package.json文件提交。package.json的依赖记录中不应包含react-native,rn-nodeify,util三项。


项目结构


c72a565d5f8964194c2f1dd7778cb9c0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg


目录
相关文章
|
24天前
|
前端开发 JavaScript 开发者
React:JSX语法入门
React:JSX语法入门
31 0
|
24天前
|
开发框架 前端开发 JavaScript
探索前端开发中的跨平台框架React Native
本文将介绍前端开发中一种备受关注的跨平台框架React Native,通过比较原生应用与React Native的优缺点,探讨其在实际项目中的应用以及未来发展趋势。
|
24天前
|
开发框架 前端开发 JavaScript
从零开始学习React Native开发
React Native是一种基于React框架的移动端开发框架,使用它可以快速地构建出高性能、原生的移动应用。本文将从零开始,介绍React Native的基础知识和开发流程,帮助读者快速入门React Native开发,并实现一个简单的ToDo应用程序。
|
24天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
2天前
|
前端开发
前端react入门day02-React中的事件绑定与组件
前端react入门day02-React中的事件绑定与组件
|
6天前
|
前端开发 iOS开发 Android开发
React Native跨平台开发实战:从零到一
学习React Native跨平台开发,首先安装Node.js和React Native CLI,设置Android/iOS环境。使用CLI创建项目,如`npx react-native init MyProject`。运行应用:`npx react-native run-android`或`run-ios`。编写组件,如在App.js中创建Hello World。添加样式,安装第三方库如react-native-vector-icons,使用react-navigation进行路由和导航。
16 2
|
17天前
|
前端开发 JavaScript Android开发
使用React Native开发跨平台移动应用的技术详解
【5月更文挑战第22天】本文详述了使用React Native开发跨平台移动应用的技术,该框架由Facebook推出,基于JavaScript,支持iOS和Android。React Native通过JNI/JSI实现JavaScript到原生代码的转换,提供高效性能和原生体验。其优势包括跨平台性、原生体验、开发速度及社区支持。开发流程涉及环境搭建、项目创建、编码、调试与测试,以及构建与发布。注意事项包括性能优化、平台适配、利用第三方库和持续学习。React Native为开发者构建高质量跨平台应用提供了便捷途径,未来潜力无限。
|
24天前
|
开发框架 移动开发 前端开发
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
【5月更文挑战第14天】Uniapp和React Native是热门的跨平台移动开发框架。Uniapp以其一套代码多端运行、丰富的组件生态和较低的学习曲线受到青睐,适合快速开发简单应用。React Native基于React,拥有活跃社区和优秀性能,适合复杂应用。React Native在性能上略胜一筹,尤其在需要接近原生体验的场景。Uniapp的官方组件弥补了社区资源不足。选择时需考虑开发效率、性能需求、团队技术栈和社区支持。
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
|
24天前
|
移动开发 前端开发 JavaScript
使用React Native进行跨平台移动开发
【5月更文挑战第13天】React Native是Facebook的跨平台移动开发框架,基于JavaScript和React,允许开发者编写原生应用。它提供跨平台性、原生性能、平缓的学习曲线及丰富的社区支持。开发流程包括安装CLI、创建项目、编写代码、运行调试及测试发布。进阶应用涉及状态管理、性能优化、原生模块集成和自动化测试。React Native降低了开发成本,提升了效率,是移动开发的优选方案。
|
24天前
|
开发框架 前端开发 JavaScript
【专栏】对比分析两种流行的跨平台开发框架——Flutter和React Native,探讨它们的优势、劣势以及适用场景
【4月更文挑战第27天】本文对比分析了Flutter和React Native两大跨平台移动开发框架。Flutter,由Google推出,以其接近原生的性能、快速启动和流畅滚动受青睐,适合高性能和高度定制的项目。React Native,Facebook维护,依赖JavaScript,虽性能受限,但热重载优势和丰富第三方库使其适合快速迭代的项目。两者都在拓展多平台应用,Flutter在桌面和Web,React Native在Windows。选择框架需考虑项目需求、团队技能和性能效率平衡。