详细记录本人学习react-native的过程

详细记录本人学习react-native的过程:

本人最近两天去了新单位,之后单位用的开发框架和之前接触的完全不一样,所以学习到了react-native

1、首先安装软件

(1)要安装的时候,大家一定要按照官网一步一步来才可以,不然特别容易出错,具体的安装细节,直接观看官网

(2)Yarn的安装

Yarn是Facebook提供的代替npm的工具,可以加速node模块的下载

npm install yarn -g

检查是否安装成功

yarn -V

2、react-native的一些目录结构

在这个文件中与我们相关的有以下三个文件,其余的文件我们几乎都是用不到的

(1)index.js:项目的入口文件;

(2)App.js:项目的根目录;

(3)package.json:项目的描述文件;

3、react-native语法

(1)在rn中默认容器布局方式,都是flex;

方向flex-direction:column

当给标签添加属性:flex:1时,当方向是横向的时候,则代表的是宽度;当是上下纵向的时候,则表示的是高度

(2)单位:不用加px;不用加vw或者vh;可以加百分比,需要注意的是用引号引起来

(3)比较方便快捷的获取屏幕的宽、高:使用Dimensions

(4)视图:View

相当于网页中的div

不支持添加字体大小、字体颜色等

不能直接放置文本内容

不支持直接绑定点击事件(一般使用TouchableOpacity来)

(5)Text:文本组件

文本标签可以设置字体颜色、大小等

支持绑定点击事件

文字阴影的书写方式

textShadow:{
textShadowColor:'red',
//水平的偏移和高度的偏移
textShadowOffset:{width:2,height:2},
//阴影的模糊度
textShadowRadius:1
}

注意:文本信息,必须要写在Text里面才可以

(7)变换

<Text style = {{backgroundColor:'aqua',transform:[{translateY:200},{scale:2}]}}</Text>

(8)TouchableOpacity

可以绑定点击事件的块级标签

相当于块级的容器

支持绑定点击事件onPress

可以设置点击时的透明度

在这个里面可以通过activeOpacity这个属性可以控制点击的透明程度,activeOpacity = {1}

<TouchableOpacity onPress = {handlePress} activeOpacity = {0}></TouchableOpacity>

(9)组件

函数组件(没有state;没有生命周期;适合简单的场景)

类组件(适合复杂的场景;有state即状态;有生命周期componentDidMount相当于vue中的mounted)

4、样式的设置

(1)创建样式对象

<View style={{marginTop:8,padding:8,backgroundColor:'blue'}}></View>

这样的写法,可以理解为:外边的大括号里面放着一个对象;书写方式需要使用驼峰式命名法

(2)直接设置样式对象

const styles = StyleSheet.create({
card:{
backgroundColor:'#ccc'
  }
})

(3)样式的优先级和继承

在react-native中没有样式的继承

在合并对象中右边的优先级高

<View style={[styles.card,{background:'yellow'}]}></Viwe>
const style = StyleSheet.create({
card:{
backgroundColor:'#ccc'
  }
})

5、react-native弹性布局

和我们的css很相似,唯一不同的是容器本身认为是弹性布局,所以在我们设置样式的时候,不要写display:flex;

6、组件状态state

状态的改变和react中的一样;

//我们定义一个状态
state:{
name:'老城',
type:'牛逼'
}
//定义一个方法,在这里去修改状态中的属性
updateState =>(){
const type = this.state.type == '牛逼'"帅""牛逼"//渲染到视图中
this.setState({type})
}
render(){
const {name,type} = this.state;
return (
<View>
     <Text onPress={this.updateState}>名称:{name}</Text>
     <Text>特点:{type}</Text>
</View>)
}

7、组件属性props

子组件中的内容

constructor(props){
super(props);
//在这个里面的数据,是由父组件传递过来的
this.state={name:props.name}
}
//触摸事件
updateState = ()=>{
const name = this.state.name == '老城牛逼''老陈你咋不翻车呢''老陈牛逼'this.setState({name:name})
}
render(){
const {name} = this.state;
return(
  <View>
      <Text onPress={this.updateState}>{name}</Text>
  </View>)
}

父组件中内容

render(){
return (
<View style={styles.container}>
//包裹着我们的子组件,在这里将所需要的数据进行一个传递,实际上是将值传递到props里面
   <SiteNameComponent name={'老陈牛逼'} />
</View>)
}

可以用作插槽,类似于vue中的slot

在子组件中我们需要在相应的位置,添加{props.children}

8、输入组件TextInput

(1)下划线颜色,透明则为transparent

underlineColorAndroid = ‘transparent’

(2)占位符

placeholder = '请输入邮箱’

(3)占位符的额字体颜色

placeholderTextColor="#ccc"

(4)字母大写格式

none/sentences/words/characters

autoCapitalize = ‘none’

(5)键盘类型,可选的值有:default/number-pad/decimal-pad/numeric/email-address/phone-pad

keyborderType=“email-address”

(6)键盘上的返回键类型,可选的值有none/go/next/search/send

returnKeyType=‘next’

(7)文本变更后的回到函数,参数为输入框的文本

onChangeText={this.handleEmail}

(8)是否属于密码框类型

secureTextEntry = {true}

(9)多行设置

multiline = {true}

(10)行数

numberOfLine={4}

(11)文本的位置靠上

textAlignVertical = ‘top’

(12)封装视图,使其可以正确响应触摸操作

9、图片组件Image

在Android上是不支持GIF和We格式的,你需要在andioid/app/bulid.gradle文件中根据需要手动添加模块,当我们修改了里面的内容,在这个时候,一定要注意的是:重新启动,效果才可以出来

render(){
//为了有滚动的效果
<ScrollView>
   //加载本地图片
   <Image source={require('./assets/1.png')}/>
   //加载网路图片,在这里需要注意的函数一定要注意宽度和高度
   <Image style={{margin:10,width:177,height:100}}
          source={{uri:'http://www.twle.cn/static/i/img.jpg'}}/>
   //图片显示模式,contain,正常的比例缩放到整个可以刚好放进来
    <Image style={{margin:10,width:200,height:200,       resizeMode:'contain',borderWidth:1,borderColor:'#333'}}
          source={require('./assets/img1.jpg')}/>
     //不会变形,放大图片到刚好覆盖住整个内容
    <Image style={{margin:10,width:200,height:200,resizeMode:'cover'}}}
          source={require('./assets/img1.jpg')/>
     //直接将图片拉伸成设置的大小,图片会变形
     <Image style={{margin:10,width:200,height:200,resizeMode:'stretch'}}}
          source={require('./assets/img1.jpg')/>     
</ScrollView>
}

10、活动指示器组件ActivityIndicator

state = {animating:true}
closeActivityIndicator = ()=>{
this.setState({
animating : !this.state.animating
})
}
componentDidMount = ()=>this.closrActivityIndicator()
render(){
//活动指示器,切换animating属性进行显示隐藏切换
<ActivityIndicator animating={animating} color="#bbb" size="large" />}

11、ImageBackground

一个可以使用图片当做背景的容器,相当于以前的div+背景图片

在这里需要指定它们宽高

<ImageBackground source={require('')}  style = {{}}><ImageBackground>

12、弹出框Alert

弹出框:一般用于弹出提示、弹出警告、弹出确认等需要用户注意和确认的动作

13、存储数据组件AsyncStorage

异步存储组件需要我们进行导入

import AsyncStorage from '@react-native-community/async-storage'

14、动画组件Animated

15、开关组件Switch

<Switch onValueChange={this.toggleSwitch} value={this.state.switchValue} />

16、状态栏组件StatusBar

状态栏就是手机屏幕最顶层上一个区域,包含运营商名称、网络情况、电池情况那一条

<StatusBar barStyle = {this.state.barStyle} hidden={this.state.hidden} />

17、选择器Picker

<Picker selectedValue = {this.state.user} onValueChange = {this.updateUser}>
//设置选项
{
this.user.map((o,index)=><Picker.item label = {o.label} value = {o.value}/>)
}
</Picker>

18、网络请求

(1)get请求

request(){
      return fetch(apiURL,{method:'GET'})
      .then(response=>response.json())
      .then(data=>{consoloe.log(data);return data})
      .catch(err=>{
      console.log(err);
      })
      
}

19、调试

(1)使用谷歌浏览器来调试

使用谷歌浏览器即可

不能查看标签结构

不能查看网络请求

(2)使用rn推荐的工作react-native-debugger来调试

不能查看标签结构

不能查看网络请求

(3)想要查看网络请求

找到项目的入口文件index.js

加入以下代码即可

GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;

20、事件

绑定事件特别需要注意this的指向问题,可以总计为如下的方式:

使用箭头函数

通过bind重新绑定this

匿名函数

21、生命周期

(1)constructor

组件被实例化的时候触发,一般用作对组件做初始化工作,如设置state等

constructor(){
super();
console.log(’构造函数初始化‘);
//对state做初始化
 this.state={
 num:100
 }
}

(2)render

组件开始渲染时触发

组件被更新时触发–state和props发生改变时触发

(3)componentDidMount

组件挂载完毕,可以发送异步请求获取数据

(4)componentWillUnmount

组件被卸载时触发

一般用在清除定时器或者取消订阅等

22、mobx

react中全局数据管理库,可以简单的实现数据的跨组件共享,类似vue中的vuex

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值