React Native API

2023-11-15

Dimensions

面对现代手机五花八门的屏占比 不知道宽度的情况下可以使用

import { Dimensions } from 'react-native';
const DimenStyle = Dimensions.get('window');
//屏幕宽度
DimenStyle.width;
//高度
DimenStyle.height;

组件

// 手机端独有组件是状态栏展示
StatusBar
// 手机loading提示信息
Activitylndicator

在这里插入图片描述
在这里插入图片描述

核心组件使用

Alert Button 按钮 弹框

import {Button, Alert} from 'react-native';
<Botton
	title='' // 名称
	color='' // 按钮的颜色
	onPress={() => {
		// 原生alert也可以使用
		alert('我是一个按钮')
		// 组件 不带title
		Alert.alert('我是一个按钮');
		Alert.alert(
			'警告提示',
			'警告内容',
			[{ // 顺序会影响按钮布局 样式部分手机生效 
				text: '取消',
				onPress:() => console.log('取消'),
				style: 'cancel'
			},{
				text: '确认',
				onPress:() => console.log('确认'),
				style: 'default'
			},{
				text: '稍后再试',
				onPress:() => console.log('稍后再试'),
			}]
		)
	}} // 类似于点击事件
>
</Botton>

StatusBar Switch 状态栏 开关

import {Switch, StatusBar, View} from 'react-native';
const statusBar = false;
<View>
	<StatusBar
		hidden={true} // true 隐藏手机状态条 默认为false
		backgroundColor='' // 尽在安卓有效 状态栏颜色
		barStyle='' 
		//三个选项 bark-content 变成黑色图标 light-content 白色图标
	/>
	//开关
	<Switch
		tackColor={{false: 'red', true: 'green'}} // 背景颜色
		thumbColor={'blue'} // 前景颜色
		value={statusBar}
		onValueChange={() => {statusBar = !statusBar}}
	/>
</View>
	

ActivityIndicator Platform 加载效果 识别机型

import {View, ActivityIndicator, Platform} from 'react-native';
if(Platform.OS === 'android') {
	安卓应用
} else if(Platform.OS === 'ios') {
	苹果应用
}
<View>
	<ActivityIndicator
		color='' // 颜色
		// 数字指定大小仅限于安卓
		size='' // 大 large 小 small 数值也可以

	/>
</View>
	

安装 和 苹果显示不同

在这里插入图片描述

Image 图片

import {View, Image} from 'react-native';
// marginVertical 外边距
// paddingHorizontal 水平方向内边距
<View>
	<Image
		style={} // 样式
		source={ //图片路径
			// require('./2.jpg') //本地图片
			uri: 'http://xxx.png' // 线上网址或者base64格式的图片
			
		}
	/>
</View>
	

TextInput 输入框

import {View, TextInput} from 'react-native';

<View>
	<TextInput // 输入框,默认没有边框
		style='' //样式
		placeholder='' //提示信息
		value='' // 展示信息
		// 键盘类型 就会调起数字键盘 更多请看官网
		keyboardType='number-pad' 
		multilint={true} // 启用多行
		numberOfLines={5} // 多行数
		textAilgnVertical='top' // 统一 文字位置
		secureTextEntry={true} // 密码属性
		onValueChange={() => {}} // 方法
	/>
</View>
	

Touchable

import {
	View,
	TouchableHighlight,
	TouchableOpacity,
	TouchableWithoutFeedback
} from 'react-native';

<View>
	<TouchableHighlight
		onPress={()=> { // 触碰时方式
		}}
	>
		<View>触碰高亮</View>
	</TouchableHighlight>
	<TouchableOpacity
		onPress={()=> { // 触碰时透明底变化
		}}
	>
		<View>透明底变化</View>
	</TouchableOpacity>
	<TouchableWithoutFeedback
		onPress={()=> { // 触碰时无响应
		}}
	>
		<View>无响应</View>
	</TouchableWithoutFeedback>
</View>
	

在这里插入图片描述

ScrollView SafeAreaView 滑动组件

import {View, ScrollView, SafeAreaView} from 'react-native';

<View>// 安卓 无法滑动到最底部 需要最底下有标签高度
	<ScrollView // 内容超出滚动
		style={}
		contentContainerStyle={} // 针对内容的样式
		showVerticalScrollIndcator={} // 隐藏滚动条
		horizontal={true} //横向滚动
	>
	
	</ScrollView> 
</View>
	安全视图
	SafeAreaView

SafeAreaView不隐藏倒刘海之下 让出安全距离
在这里插入图片描述

SectionList SafeAreaView 高性能列表组件

import React from "react";
import { StyleSheet, Text, View, SafeAreaView, SectionList, StatusBar } from "react-native";

const DATA = [
  {
    title: "标题1", // 标题
    data: ["Pizza", "Burger", "Risotto"] // 数据
  }
];

const Item = (item:any) => (
  <View style={styles.item}>
    <Text style={styles.title}>{item.title}</Text>
  </View>
);

const App = () => (
  <SafeAreaView style={styles.container}>
    <SectionList
      sections={DATA}//存放数据
      keyExtractor={(item, index) => item + index} //key
      renderItem={({ item }) => <Item title={item} />} // 每一个列表项的默认渲染器
      renderSectionHeader={({ section }) => { // 展示title
        return  <Text style={styles.header}>{section.title}</Text>
      }}
       // 添加列表头部
        ListHeaderComponent={() => (
            <Text>我列表标题</Text>
        )}
        // 添加列表底部
        ListFooterComponent={() => (
            <Text>到底了!!!!</Text>
        )}
        // 触发下拉刷新到底部 0.1 -----> 10%
        onEndReachedThreshold={0.1} 
        // 触发下拉事件
        onEndReached={() => {
            console.log('到底了???')
        }}
        // loading 效果
        refreshing={isLoading}
        // 上拉触发事件
        onRefresh={onRefresh}
        // 没有数据时展示
        ListEmptyComponent={() => (
            <Text>空空如也</Text>
        )}
        // 分隔符每一项的
        ItemSeparatorComponent={() => (
            <View style={[styles.separator]}/>
        )}
    />
  </SafeAreaView>
);

const styles = StyleSheet.create({
  container: {
    // flex: 1,
    paddingTop: StatusBar.currentHeight,
    marginHorizontal: 16
  },
  item: {
    backgroundColor: "#f9c2ff",
    padding: 20,
    marginVertical: 8
  },
  header: {
    fontSize: 32,
    backgroundColor: "#fff"
  },
  title: {
    fontSize: 24
  }
});

export default App;

FlatList 高性能的简单列表组件

import React, {useState} from 'react';
import { SafeAreaView, View, FlatList, StyleSheet, Text, StatusBar, Platform ,TouchableOpacity} from 'react-native';

const DATA = [
    {
    id: 'bd7a11113abb28ba',
    title: '1头条',
    ];


const App = () => {
    const [isLoading, setIsLoading]= useState(false)
    const [selsetdID, setSelsetdID]= useState(null);
    const renderItem = ({ item }:any) => {
        const backgroundColor = item.id  === selsetdID ? 'blue' : 'pink'
        return (
            <TouchableOpacity
                style={styles.item}
                onPress={() => setSelsetdID(item.id)}
            >
                <Text style={[styles.title, { backgroundColor }]}>{item.title}</Text>
            </TouchableOpacity>
        );
      };
    const onRefresh = (cal?: any) => {
        console.log('触发下拉刷新')
        setIsLoading(true);
        setTimeout(() => {
            setIsLoading(false);
            console.log('刷新列表成功');  
        }, 3000) 
    }
  return (
    <SafeAreaView style={styles.container}>
      <FlatList
        data={DATA}
        renderItem={renderItem}
        keyExtractor={item => item.id}
        // 默认滚动位置
        initialScrollIndex={1}
        // 默认提前加载
        initialNumToRender={4}
        // 列数
        numColumns={1}
        // 反转倒置
        inverted={false}
        // 默认选中ID
        extraData={selsetdID}
        // 水平模式
        // horizontal={true}
        // 添加列表头部
        ListHeaderComponent={() => (
            <Text>我列表标题</Text>
        )}
        // 添加列表底部
        ListFooterComponent={() => (
            <Text>到底了!!!!</Text>
        )}
        // 触发下拉刷新到底部 0.1 -----> 10%
        onEndReachedThreshold={0.1} 
        // 触发下拉事件
        onEndReached={() => {
            console.log('到底了???')
        }}
        // loading 效果
        refreshing={isLoading}
        // 上拉触发事件
        onRefresh={onRefresh}
        // 没有数据时展示
        ListEmptyComponent={() => (
            <Text>空空如也</Text>
        )}
        // 分隔符每一项的
        ItemSeparatorComponent={() => (
            <View style={[styles.separator]}/>
        )}
      />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: StatusBar.currentHeight || 0,
  },
  item: {
    backgroundColor: '#f9c2ff',
    padding: 20,
    marginVertical: 8,
    marginHorizontal: 16,
  },
  title: {
    fontSize: 32,
  },
  separator: {
    borderWidth: 1,
    borderColor: 'red',
    margin: 10
  }
});

export default App;

在这里插入图片描述

开启水平的会变成横向的
在这里插入图片描述

动画

基础内容
在这里插入图片描述

import React, { useEffect, useRef } from "react";
import { Animated, Text, View, StyleSheet, Button } from "react-native";

const App = () => {
  // fadeAnim will be used as the value for opacity. Initial Value: 0
  const fadeAnim = useRef(new Animated.Value(0)).current;
  const containerAnim = useRef(new Animated.Value(0)).current;

  const fadeIn = () => {
    Animated.timing(fadeAnim, {
      toValue: 1,  // 目标值
      duration: 3000, // 时间
      useNativeDriver: true // 启用原生模式
    }).start();// 启动
  };

  const fadeOut = () => {
    Animated.timing(fadeAnim, {
      toValue: 0,
      duration: 3000,
      useNativeDriver: true
    }).start(() => {// 结束执行
      console.log('动画执行结束');
    });
  };
  // 组件加载 开启动画
  useEffect(() => {
    scanMove()
  }, []);
  const scanMove = () => {
    Animated.timing(containerAnim, {
      toValue: 200,
      duration: 2000,
      useNativeDriver: true
    }).start(() => {// 结束执行
      console.log('动画执行结束');
      scanMoveEnd()
    });
  }
  const scanMoveEnd = () => {
    Animated.timing(containerAnim, {
      toValue: 0,
      duration: 2000,
      useNativeDriver: true
    }).start(() => {// 结束执行
      console.log('动画执行结束');
      scanMove()
    });
  }
  return (
    <View style={styles.container}>
      <Animated.View
        style={[
          styles.fadingContainer,
          {
            opacity: fadeAnim
          }
        ]}
      >
        <Text style={styles.fadingText}>Fading View!</Text>
      </Animated.View>
      <View style={styles.buttonRow}>
        <Button title="Fade In" onPress={fadeIn} />
        <Button title="Fade Out" onPress={fadeOut} />
      </View>
      <View style={styles.scanningContainer}>
        <Animated.View
          style={[
            styles.containerStyle,
            {
              transform:[{
                translateY: containerAnim
              }]
            }
          ]}
        />
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center"
  },
  containerStyle: {
    height: 1,
    width: 200,
    backgroundColor: "powderblue"
  },
  fadingContainer: {
    paddingVertical: 8,
    paddingHorizontal: 16,
    backgroundColor: "powderblue"
  },
  fadingText: {
    fontSize: 28,
    textAlign: "center",
    margin: 10
  },
  buttonRow: {
    flexDirection: "row",
    marginVertical: 16
  },
  scanningContainer: {
    width: 200,
    height: 200,
    borderColor: 'blue',
    borderWidth: 1
  }
});

export default App;

在这里插入图片描述

第三方组件

在这里插入图片描述

 npm install react-native-webview
//---------
     const [url,setUrl] = useState('http://www.baidu.com');
     const webView:any = useRef(null)
     const [urlInput,setUrlInput] = useState(url);
  
     //页面加载完成触发
     const webViewOnLoad = (syntheticEvent: { nativeEvent: any; }) => {
         const {nativeEvent} = syntheticEvent;
         const curl = nativeEvent.url;
         //根据url地址判断刚才已经完成什么操作
         const jmurl = decodeURIComponent(curl);
         setUrlInput(jmurl);
         console.log("网页加载完成,地址是:"+jmurl)
     };
  
     //接收web发送过来的信息
     const onMessage = (event: { nativeEvent: { data: any; }; }) => {
         const rep = event.nativeEvent.data;
         //console.log('-----------webview返回结果--------------');
         let minLog = rep;
         if (rep.length > 300) {
             minLog = rep.substring(0, 290);    //日志太长影响观感
         }
         console.log(minLog);
     };
     return (
         <SafeAreaView style={{flex:1}}>
             <View style={{height:40,flexDirection:'row',justifyContent:'space-between'}}>
                 <TextInput
                     style={{flex:1, height: 40, borderColor: 'gray', borderWidth: 1 }}
                     onChangeText={text => setUrlInput(text)}
                     value={urlInput}
                 />
                 <Button title={"转到"} onPress={()=>{
                     setUrl(urlInput);
                 }}/>
             </View>
             <WebView source={{uri: url}}
                      ref={(webVieww) => {webView.current = webVieww}}
                    //   sharedCookiesEnabled={true}
                    //   startInLoadingState={true}
                    //   onLoad={webViewOnLoad}
                    //   onMessage={onMessage}
                      onError={syntheticEvent => {
                          const {nativeEvent} = syntheticEvent;
                          console.log('网络连接失败!');
                          console.warn('WebView error: ', nativeEvent);
                      }}
             />
             <View style={{flexDirection:'row',justifyContent:'space-between',height:40,backgroundColor:'white'}}>
                 <Button title={"主页"} onPress={()=>{
                     setUrl('http://www.baidu.com?t='+new Date().getTime());
                 }}/>
                 <Button title={"后退"} onPress={()=>{
                     webView.current.goBack();
                 }}/>
  
                 <Button title={"前进"} onPress={()=>{
                     webView.current.goForward();
                 }}/>
  
                 <Button title={"刷新"} onPress={()=>{
                     webView.current.reload();
                 }}/>
             </View>
  
         </SafeAreaView>);
 };

//-----------
<WebView 
   originWhitelist={['*']}
   source={{html: '<h1>11111</h1>'}}
/>

百度输入地址可投入 手机页面上 也支持 html 详情参照
在这里插入图片描述

Picker (下拉框)

yarn add @react-native-picker/picker
// 注意安卓和ios不同效果
// 需要不同配置
import React, { useState } from 'react'
import { StyleSheet, Text, View } from 'react-native'
import { Picker } from '@react-native-picker/picker';
const App = () =>
{
    let users = [
        { label: '请选择常用的聊天软件', value: '' },
        { label: 'QQ', value: '									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native API 的相关文章

随机推荐

  • ffmpeg视频裁剪

    需要注意 ffmpeg 命令 s 指定了宽高后 如果为奇数宽高 101 101 则裁剪后的视频无法正常播放 不加 s则ffmpeg自动 1处理 private void cutVideo throws Exception try Strin
  • 数组及常用方法

    思维导图 数组的基本概念 什么是数组 数组是存储一个或多个数据的容积 它是一组内存空间 通常用来批量处理数据 这组内存空间的名字叫做数组2 数组的特点 对齐自身储存的数据并没有什么要求 无论是数量还是类型 数组中的每一项可以是任意一种数据类
  • Eviews导入外部Excel数据并回归分析

    本文是计量学习中学习笔记 下面直接放截图 导入数据在这一步之前 需要注意Excel中的数据文件不能有中文字符 否则会报错 回归时需要先选中被解释变量 同时按住Ctrl建依次再选中解释变量 回归结果中可以看出 3 6的参数是不过检的 这说明原
  • cadence学习笔记(5)-从其他PCB(AD、PADS)导出Allegro使用的封装库

    一 AD转Allegro封装库 1 AD转ASCLL文件 2 一定要选择ASCLL文件 3 打开Allegro软件导入刚刚生成的PCB文件 4 转化完成的PCB AD原PCB 5 导出AllegroPCB封装库 6 生成的封装库文件 二 P
  • uni-app全局变量的存储和页面数据之间的传递

    https ask dcloud net cn article 35021 目录 1 变量存储 1 1使用公用模块存储 就是一个公共的页面 1 2 挂载到 Vue prototype存储 1 3使用globalData存储 1 4 使用vu
  • 阿里巴巴2014笔试总结

    昨天去笔试的 对我一个非计算机系的真的是略难 今天还能回忆起几道题目 就贴上来当个总结吧 单选第三题 比较两段程序哪个的效率更高 t1 for i 0 i lt 1000000 i for j 0 j lt 100 j expression
  • windows下的C++ socket服务器(2)

    博客园 闪存 首页 新随笔 联系 管理 订阅 随笔 16 文章 0 评论 33 windows下的C socket服务器二 int make server socket int port 1 void handleAccept int so
  • Windows 使用第三方工具curl 模拟GET 请求

    Windows环境之Curl下载地址 https curl se windows Curl 基本用法 1 访问百度网页 并将网页源码保存到本地 curl o news txt www baidu com 2 访问百度网页 并显示请求头部信息
  • 算法:滑动窗口解决连续区间子数组问题

    文章目录 实现原理 实现思路 典型例题 长度最小的子数组 无重复字符的最小字串 最大连续1的个数III 将x减到0的最小操作 水果成篮 找到字符串中所有字母异位词 哈希表比较优化 对哈希表内元素比较的优化 总结 本篇积累的是滑动窗口的问题
  • 今天来尝试一下docker

    1 先在服务器上下载docker 这儿使用官方安装脚本自动安装 阿里 curl fsSL https get docker com bash s docker mirror aliyun 我这儿还查看了一下版本 这个就安装成功了 2 环境配
  • Python3.6+RobotFramework自动化测试框架环境搭建-学习笔记

    Python3 6 RobotFramework自动化测试框架环境搭建 学习笔记 一 Appium服务端 1 JDK安装 1 1 推荐JDK版本 1 2 下载地址 1 3 下载方法 1 4 安装方法 2 安卓SDK 2 1 下载方法 2 3
  • 【学习记录】STM32利用定时器中断实现定时闪烁指示灯

    任务 定时闪烁指示灯 任务目标 掌握 CubeMX 软件配置定时器实现定时功能的方法 任务内容 控制开发板上的指示灯LED每隔1s闪烁 任务实现 使用的STM32芯片是STM32F407ZET6 第一步 设置高速时钟 设置LED 第二步 配
  • java使用反射修改注解参数值内容

    方法一 该方法不太灵活 过程 使用反射获取指定method上方的指定注解 拿到该注解的String类型的参数值 使用反射修改该String对象内字符数组的地址 import java lang annotation import java
  • mysql查询json字段中value值,mysql查询字段不包含某个字符串

    工作中遇到问题 需要查询表中某个字段不包含某个指定字符串的问题 以及查询json数据中某个key对应的value值 问题1 查询 user id 不包含 字符的数据 数据如下 id user id 51 jingi ctfo com 52
  • 逻辑思维三大定律

    逻辑思维三大定律 同一律 矛盾律 排中律 同一律 A 是 A 前后思维中 概念要同一 白马非马论违反同一律 商家的买一赠一 前后两个一不是同一个概念 违反同一律 同一律是逻辑思维的基础 矛盾律 A 是 B A 不是B 这两句话矛盾 对同一事
  • c盘那些文件可以删除

    c盘那些文件可以删除 http www xitongzhijia net xtjc 20150507 47691 html
  • OSPF笔记(一):OSPF基本特点、自治系统、区域、RID冲突

    一 OSPF基本特点 1 1 支持无类域间路由 CIDR 1 2 无环路 1 区域内 100 无环 2 区域间 不一定无环 1 3 收敛速度快 1 4 使用组播收发协议数据 224 0 0 5 224 0 0 6 1 5 支持多条等价路由
  • MySQL数据库 学习笔记 零基础入门 面试 整理

    一 MySQL基础篇 1 数据库技术的基本概念和方法 1 1 数据库基本概念 1 数据 数据 Data 指对客观事物进行描述并可以鉴别的符号 这些符号是可识别的 抽象的 不仅仅指狭义上的数字 而是有多种表现形式 字母 文字 文本 图形 音频
  • 【笔试强训选择题】Day32.习题(错题)解析

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 笔试强训选择题 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 前言 一 Day32习题 错题 解析 总结 前言 今天是笔试强训第32天 一 Day32习题
  • React Native API

    Dimensions 面对现代手机五花八门的屏占比 不知道宽度的情况下可以使用 import Dimensions from react native const DimenStyle Dimensions get window 屏幕宽度
Powered by Hwhale