react-native

init

index.js

//AppRegistry是React Native应用的JS入口
import { AppRegistry } from 'react-native'
//AppRegistry.registerComponent注册应用
AppRegistry.registerComponent(appName, () => App)

hook

  • 是一个特殊的函数,复用状态逻辑的方式,不复用state本身
  • 可在单个组件中多次调用
  • Hook 使用了 JavaScript 的闭包机制
  • 可以多次使用useState和useEffect
  • 只能在函数最外层调用hook,不要在循环,条件判断或者子函数中调用
  • 自定义hook,表单处理、动画、订阅声明、计时器等场景

useState&useEffect

//在react函数组件中添加state的hook
useState//参数是初始state

const [count, setCount] = useState(0)与下面的等价
var countList = useState(0)
var count = countList [0]
var setCount = countList [1]

const [todos, setTodos] = useState([{ text: '123' }])//State 变量可以很好地存储对象和数组
//在函数组件中执行副作用
useEffect//通过跳过Effect进行性能优化
useEffect(() => {
	document.title = `count`
}, 0)//react会将前一次渲染的值和后一次渲染的值进行比较,相等会跳过这个effect

useEffect(() => {
	document.title = `count`
}, [])//只运行一次effect,不依赖props和state中的任何值

hook&class

Hook 使你在非 class 的情况下可以使用更多的 React 特性

  • 无需编写class的情况使用state
  • 无需需改组件结构的情况下复用状态逻辑
  • 将组件中互相关联的部分拆分成更小的函数
import React, { useState, useEffect } from 'react'
//函数组件
//function fn(props) {
const fn = (props) => {
	const [count, setCount] = useState(0)
	useEffect(() => {
		document.title = `count`
	})
	const [isOnline, setIsOnline] = useState(null)
	useEffect(() => {
		ChatAPI.subscribeToFriendStatus(props.frined.id, handleStatusChange)
		return() => {
			ChatAPI.unsubscribeFromFriendStatus(props.frined.id, handleStatusChange)//可以在组件销毁时取消对ChatAPI的订阅
		}
	})
	function handleStatusChange(status) {
		setIsOnline(status.online)
	}
	return (
		<div>
			<p>{count}</p>
			<button onClick={() => setCount(count + 1)}>
				点击
			</button>
		</div>
	)
}

//class组件
class fn extends React.Component {
	constructor(props) {
		super(props)
		this.state = {
			count: 0
		}
	}
	render() {
		return (
			<div>
				<p>{this.state.count}</p>
				<button onClick={() => this.setState({ count: this.state.count + 1 })}>
					点击
				</button>
			</div>
		)
	}
}

自定义hook

import React, { useState, useEffect } from 'react'
const useFriendStatus = (friendID) => {
	const [isOnline, setIsOnline] = useState(null)
	function handleStatusChange(status) {
		setIsOnline(status.isOnline)
	}
	useEffect(() => {
		ChatAPI.subscribeToFriendStatus(frinedID, handleStatusChange)
		return() => {
			ChatAPI.unsubscribeFromFriendStatus(frinedID, handleStatusChange)//可以在组件销毁时取消对ChatAPI的订阅
		}
	})
	return isOnline//返回好友是否在线
}

其他hook

useContext//订阅react的context
useReducer//通过reducer管理本地state
useColorScheme//提供和订阅配色方案更新

组件

ImageBackground

<ImageBackground source={require()}></ImageBackground>

图片的resizeMode属性

  • contain
  • stretch
    填充,图片畸形
  • cover
    在显示比例不失真的情况下填充整个显示区域,可放大和缩小,超出部分不显示
  • center

TouchableOpacity

封装视图,可以正确响应触摸操作

NavigationActions

import { NavigationActions } from 'react-navigation';
const navigateAction = NavigationActions.navigate({
  routeName: 'Profile',

  params: {},

  action: NavigationActions.navigate({ routeName: 'SubProfileRoute' }),
});

this.props.navigation.dispatch(navigateAction);

StackActions

import { StackActions, NavigationActions } from "react-navigation"
const resetAction = StackActions.reset({
     index: 1,
     actions: [
        NavigationActions.navigate({ routeName: 'Page1' }), 
        NavigationActions.navigate({ routeName: 'Page3', params: {}})
      ]
});
this.props.navigation.dispatch(resetAction) //导航至Page3,重置路由

Modal

覆盖全屏的模态视图

import { Modal } from "react-native";
export default class UpdateModal extends Component{
    constructor(props){
      super(props)
      this.state = {
          type:1
      }
    }
    render() {
    	return (
    		<Modal
    			animationType = "slide"
                transparent={true}
                visible={this.props.modalVisible}
                onRequestClose={() => {
            		this.setModalVisible(!modalVisible);
          		}}
    		>
    		</Modal>
    	)
    }
}

API

StyleSheet

提供了一种类似 CSS 样式表的抽象

import React from 'react'
import { StyleSheet } from 'react-native'
const styles = StyleSheet.create({})

应用程序接口

Linking

提供了一个通用的接口来与极限和传出的App链接进行交互

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值