首页 > 其他分享 >CS571 W9/10 React Native1/2 HW7/8 笔记

CS571 W9/10 React Native1/2 HW7/8 笔记

时间:2024-04-02 15:16:21浏览次数:15  
标签:10 const CS571 React react 组件 import Navigation

1. React Native 基本常识

1.与安卓设备连接

安卓下载 Expo,使用 USB 连接电脑,打开手机ADB调试

在 Console 里输入 npm start 以后戳 a 在安卓设备上运行。如果提示 SDK 版本太低检查一下有没有 npm install

2. React Native 的组件

React Native 组件在不同的平台上会被翻译成不同的组件。

React Native 没有 HTML/DOM CSS 的概念。因此 p 标签与 CSS 表等熟悉的概念不再适用。

对于样式,我们使用JS样式表。通过StyleSheet.create从一个 JS Object 中创建一个样式表。示例代码如下:

import {StyleSheet,Text} from 'react-native'
const styles=StyleSheet.create({
    p:{
        fontSize:16
    },
    container:{
        flex:1,
        justifyContent:'center',
        backgroundColor:'green'
    }
})
<Text style={styles.p}>这是一个虚假的p标签</Text>
<Text style={[styles.p,styles.thm]}>使用多个样式的方法</Text>

然后列举一些 RN 组件和对应的 React 组件。

React 组件 RN 组件 使用例 备注

/

相对屏幕固定
可滚动的内容
style 参数内必须显式指定图片长宽,source 是一个 JS Object ,其中的连接是 uri 并不是 url
Button 必须指定标题!而不是把标题文本夹在标签中间,按压触发是 onPress 不是 onClick!
开关,使用受控组件维护

3. 分平台的组件

如果有些组件(例如)只有在安卓/iOS 平台上有?

import {Platform} from "react-native"

if (Platform.OS === 'android') 
    return <Component_android/>
 else return <Component_iOS/>

4. 获取屏幕大小

import {Dimensios} from "react-native"

const getScreenSize = () => {
    const screenWidth = Math.round(Dimensions.get('window').width);
    const screenHeight = Math.round(Dimensions.get('window').height);
    return { screenWidth: screenWidth, screenHeight: screenHeight };
  } 

在大型项目中,建议使用 useMemo 来固定 getScreenSize 函数。

2. React Navigation

1. 什么是React Navigation?

之前的课程使用 React Router 进行导航。

简要来说,React Navigation 是基于 Screen 的概念,因此更适合移动端导航。React Router 基于 path 适用于网页端导航:

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Layout/>} >
    	<Route path="index" element={<Home/>}/>
        <Route path="about-us" element={<AboutUs/>}/>
        <Route path="*" element={<NoneExist/>}/>
    </Route>
  </Routes>
</BrowserRouter>

两者的共同之处在于把网页/手机 App 页屏视为 React 组件。

2. React Navigation 的三种形式

  • Tab Navigation 屏幕底部的导航栏
  • Drawer Navigation 是一个可收纳的导航栏
  • Stack Navigation 是一个存放页面的栈,通过返回键来 pop

代码示例(Tab Navigation):

import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";

const BadgerSocialTabs = createBottomTabNavigator();


export default function App() {
  return (
    <NavigationContainer>
      <BadgerSocialTabs.Navigator >
        <BadgerSocialTabs.Screen name="NewsFeed" component={NewsFeedScreen} options={{headerShown: false}}/>
        <BadgerSocialTabs.Screen name="Notifications" component={NotificationScreen}/>
        <BadgerSocialTabs.Screen name="AboutMe" component={AboutMeScreen} options={{title: "Profile"}}/>
      </BadgerSocialTabs.Navigator>
    </NavigationContainer>
  );
}

最外层使用 NavigationContainer 包裹,BadgerSocialTabs 是一个利用createBottomTabNavigator 制作出来的组件对象。外层是<.Navigator> 内层是 <.Screen>

name 是导航的标签,component 表示要导航去的组件。

options 选项内可以使用title指定显示的标题,或是用 headerShown:false 来取消显示标题。

3. 导航嵌套&Stack Navigator

上面的代码,NewsFeedScreen 组件里边还可以放一个导航。(例如一个Stack Navigation 表示看的新闻卡片)

注意 NavigationContainer 不能嵌套!所以在 NewsFeedScreen 组件里边放的是Navigator-Screen 两层结构。

import { createNativeStackNavigator } from "@react-navigation/native-stack";

import NewsFeedScreen from '../NewsFeedScreen';
import NewsFeedDetailScreen from '../NewsFeedDetailScreen';

const NewsStack = createNativeStackNavigator();

function NewsFeedStack() {
  return (
      <NewsStack.Navigator>
        <NewsStack.Screen name="AllPosts" component={NewsFeedScreen} options={{headerShown: false}}/>
        <NewsStack.Screen name="SpecificPost" component={NewsFeedDetailScreen} options={{headerShown: false}}/>
      </NewsStack.Navigator>
  );
}

对于 Stack Navigation 的理解:Navigator 内部的 Screen 们可以视为一个 map,在 name 和 component 间建立联系。

使用跳转:

先使用:const navigation=useNavigation()

再使用:navigation.push(screenName,params)

screenName 是那个 Screen 的 name,而不是 component 名字。

params 表示要传进那个组件里边的 props。

在组件中调用 props:props.route.params

3. 待补

1. Flexbox?

2. Linking

标签:10,const,CS571,React,react,组件,import,Navigation
From: https://www.cnblogs.com/ss80194/p/18110588

相关文章

  • CS571 W7-React4/HW6
    1.API使用进阶在过去的作业中,我们了解了fetch函数的GET方法。与API交互所使用的函数均为fetch(无论是采用GET,POST还是别的任何方法)。一个通用的fetch函数案例:fetch(`https://cs571.org/api/f23/hw6/messages?chatroom=${props.name}`,{method:"POST",cre......
  • CS571 W6/HW5 -React3 笔记
    1.React返回多个组件functionComponent(){return(<p>一个p标签</p><h1>一个一级标题</h1>)}对于不同的组件,需要用小括号括起来,否则React只会返回最上面的那个。如果是整个组件返回,用div标签括起来另外,不要滥用空标签<>,例如使用<Carousel>和......
  • 初始化kubeadm init失败,再次初始化时显示6443、10259、10257、10250、2379、2380被占
    第一次使用kubeadminit初始化时,因kubelet.service和和kubelet未启动等部分原因导致初始化失败,当再次初始化时显示6443、10259、10257、10250、2379、2380这几个端口被占用,一个个使用sudolsof-i:port查看太麻烦,直接使用kubeadmreset将当前节点恢复为未安装Kubernetes的状......
  • Windows10基于docker的mysql8的备份和拷贝文件到宿主机
    Windows10基于docker的mysql8的备份和拷贝文件到宿主机##环境说明操作系统:windows10docker:v4.25.0mysql:8##进入容器dockerexec-itmysql8/bin/bash ##备份特定数据库mysqldump-uroot-pMm123456jeesite>jeesite.sql ##退出容器 exit ##将备份......
  • Python从0到100(九):Python字符串介绍及使用
    一、字符串的定义1.什么是字符串字符串是一种表示文本数据的类型。所谓字符串,就是由零个或多个字符组成的有限序列,一般记为:s=a......
  • pta 1013 数素数
    013数素数分数20全屏浏览切换布局作者 CHEN,Yue单位 浙江大学令 Pi​ 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM​ 到 PN​ 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从 PM​ 到 PN​ 的所有素......
  • STM32F103系列IIC通讯代码
    CH1--SDA;CH2--SCL。 #include"iic.h"voidIIC_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin......
  • 大数据环境下 实现每天千万级地址关联 10万/秒
    地名作为最常用的社会公共信息,不仅与人们的日常生活息息相关,而且是政府行政行为、经济建设不可缺少的基础信息资源。在政务系统中有许多需要将业务地址关联到标准地址的场景,addresstool致力于解决地址关联匹配算法中的速度和准确性问题。经实测,单核addresstool的地址关联速......
  • React - React Router
    安装pnpmireact-router-dom布局布局组件用于定义应用程序的整体布局结构,决定如何将匹配的子路由渲染到指定的位置(通过<Outlet/>)。file:[src/layouts/index.js]import{Outlet,Link}from"react-router-dom";exportdefaultfunctionLayout(){return(<d......
  • C语言程序10题
    第101题(10.0分)          难度:易       第2章/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:计算平均成绩并统计90分以上人数。----------------------......