【reactNative混合安卓开发~使用问题持续更】

news/2024/10/23 5:42:30/

reactNative混合安卓开发

  • reactNative开发移动端
    • reactNative界面开发
    • RN问题记录
      • 1、使用theme.js写的公共组件报错(funcMap[props] undefined)

reactNative开发移动端

用reactNative(VsCode编译器)开发移动端界面,Android开发后端接口(Android Studio编译器)。

reactNative界面开发

reactNative提供组件,或者使用第三方库提供的组件,数据(包含规则校验)由 yup、formik提供,除启动界面:login,register,splash等账户登录后,一般使用导航栏(@react-navigation/drawer、‘npm install react-native-gesture-handler react-native-reanimated’)包含抽屉(Drawer Navigator)、tab切换(Bottom Tabs Navigator)进行路由导航(一般适用于简单页面切换),详情API请看https://reactnavigation.org/docs/drawer-navigator

前端init.bat文件部分组件

rem 界面基础组件
yarn add react-native
yarn add @ant-design/react-nativerem  界面数据(formik)与表单验证(Yup验证规则)
npm install yup
npm install formikrem 统一样式模板
yarn add @shopify/restylerem 其他组件(第三方)
yarn add react-native-keyboard-aware-scroll-view
rem 菜单导航栏
yarn add @react-navigation/drawer

RN问题记录

1、使用theme.js写的公共组件报错(funcMap[props] undefined)

原因:import @shopify/restyle没有定义 <ThemeProvider theme={theme}></ThemeProvider>
解决方式:在根页面定义<ThemeProvider theme={theme}><ThemeProvider>,或单独使用的页面也要加这个。
案例如下
描述: 导航页TCPZDrawerNavigator.js引入ThemeProvider标签;使用页面YDLXDTList.js应用组件LableValueInput;定义公共组件LableValueInput.js(使用了@shopify/restyle、theme)
使用公共组件和统一样式:代码只包含使用公用组件LableValueInput用法,样式部分可能会报错,需要修改

import React, { useState } from 'react';
import * as Yup from 'yup';
import { Formik, useFormik, useField } from 'formik';
// 原生接口
import { YDLXDTService, RunActivity } from '~/native/nativeModules';
import {Container,Button,Box,CusCheckbox,Header,UserContext,LableValueInput,ConfirmModal, Error} from  '~/components'//模板校验规则
const ydlxdtSchema = Yup.object().shape({mc: Yup.string()// 只能输入数字、字母、汉字.matches( /^[\da-zA-Z\u4E00-\u9FA5]+$/u,'图层名称存在违规字符,请重新输入!').required('图层名称必填'),lx: Yup.string().matches( /^[\da-zA-Z_\u4E00-\u9FA5\-.]+$/u,'矢量数据类型存在违规字符,请重新输入!'),address: Yup.string().matches( /^[\da-zA-Z_\u4E00-\u9FA5\-.]+$/u,'详细地址存在违规字符,请重新输入!').required('详细地址必填'),dh: Yup.string().matches( /^[\da-zA-Z_\u4E00-\u9FA5\-.]+$/u,'地号存在违规字符,请重新输入!'),zValue: Yup.string().matches( /^[\da-zA-Z\u4E00-\u9FA5]+$/u,'证书编号的字存在违规字符,请重新输入!').required('证书编号的字必填'),hValue: Yup.string().matches( /^[\da-zA-Z\u4E00-\u9FA5]+$/u,'证书编号的号存在违规字符,请重新输入!').required('证书编号的号必填'),syqmj: Yup.number(),page: Yup.number().min(1),});export function YDLXDTList()  {
// 这里有其他定义的let [ydlxdt, setYdlxdt] = React.useState({});
const    { handleChange, handleBlur, handleSubmit, errors,touched,values,setFieldValue,setValues }=useFormik({validationSchema:ydlxdtSchema,initialValues: {tcid: ydlxdt?.tcid,xh: ydlxdt && ydlxdt.xh ? ydlxdt.xh : "",mc:ydlxdt &&  ydlxdt.mc?ydlxdt.mc:"",lx: ydlxdt && ydlxdt.lx?ydlxdt.lx:"",fz:ydlxdt && ydlxdt.fz?ydlxdt.fz:"",fzxh:ydlxdt && ydlxdt.fzxh ?ydlxdt.fzxh :'',tbzt:ydlxdt && ydlxdt.tbzt?ydlxdt.tbzt:"是",tbsj:ydlxdt && ydlxdt.tbsj?ydlxdt.tbsj:"",sfdt:ydlxdt && ydlxdt.sfdt? ydlxdt.sfdt:"",sfnbcc :ydlxdt &&  ydlxdt.sfnbcc? ydlxdt.sfnbcc:"",minScale: ydlxdt &&  ydlxdt.minScale?ydlxdt.minScale:"",maxScale: ydlxdt &&  ydlxdt.maxScale?ydlxdt.maxScale:"",sfjz: ydlxdt &&  ydlxdt.sfjz?ydlxdt.sfjz:"",ipaddress:ydlxdt?.ipaddress,sfquery: ydlxdt?.sfquery,sfzyfx: ydlxdt?.sfzyfx},onSubmit: values => {console.log('onsubmit');debugger;console.log(values);// 处理 每个字段是否包含敏感词,并直接替换为空handleSensitiveWord(values);
dataHandle.qzxx_save(userData.token,values,saveQzxxCallBack,refreshQZXXState);     },});return (
<SafeAreaView style={styles.container}><Loading loading={loading}></Loading><LableValueInputlabelName="权利人"placeholder="请输入权利人"value={values.qlrxm}onChangeText={handleChange('qlrxm')}onBlur={handleBlur('qlrxm')}error={errors.qlrxm}touched={touched.qlrxm}borderBottomColor="text2"labelTextCss={styles.labelTextCss}style={styles.valueText}/>
</SafeAreaView>
)}

定义LableValueInput组件

import React, { useState,forwardRef } from "react";
import {View,StyleSheet,TextInput } from "react-native";
import Icon from 'react-native-vector-icons/Ionicons';
import theme,{ Box,Text} from "../Theme";
import RoundedIcon from "../RoundedIcon";const  SIZE= theme.borderRadii.m*2;const LableValueInput = forwardRef(({labelName,touched,error,borderBottomColor,labelTextCss,...props},ref)=>{debugger;const reColor = !touched ? "text2" : error ? "danger" : "primary";const color=theme.colors[reColor];return (<Box  flexDirection="row" alignItems = "center" borderBottomWidth={StyleSheet.hairlineWidth}{...{borderBottomColor}}><Text style={labelTextCss}>{labelName}</Text><TextInput underlineColorAndroid="transparent" flex={1}placeholderTextColor={color}{...{ref}}{...props}/>{(touched) && (<RoundedIconname={!error?"ios-checkmark":"ios-close"}size={SIZE}backgroundColor={!error?"primary":"danger"}color="white" />)}</Box>)
})
export default  LableValueInput;

导航页面TCPZDrawerNavigator.js引用theme、@shopify/restyle

import * as React from 'react';
import { Button, View } from 'react-native';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';import HomeScreen from '~/module/screens/tcpz/HomeScreen';
import LxdtScreen from '~/module/screens/xmhc/YDLXDTList';
import Ionicons from 'react-native-vector-icons/Ionicons';
import MaterialIcons from 'react-native-vector-icons/MaterialIcons';import {GEONavigator} from '~/module/navigators/GEONavigator';
import {YDLXDTNavigator} from '~/module/navigators/YDLXDTNavigator';import CustomerDrawer from '~/module/navigators/CustomerDrawer';
import {ThemeProvider,createBox,createText,createRestyleComponent,createVariant,VariantProps,} from '@shopify/restyle';import theme from '~/component/Theme';
const Drawer = createDrawerNavigator();
const focused='#7cc';
const size = 22;
// 图层配置菜单
export default function TCPZDrawerNavigator() {return (<ThemeProvider theme={theme}><NavigationContainer><Drawer.Navigator initialRouteName="Home"  screenOptions={{headerShown:true,drawerActiveBackgroundColor:'#7cc',drawerActiveTintColor:'#fff', drawerInactiveTintColor:'#333', drawerLabelStyle:{marginLeft:-25,fontFamily:'Roboto-Medium',fontSize:15}}} drawerContent={props =><CustomerDrawer {...props} />}><Drawer.Screen name="Home" component={HomeScreen}   options={{title: '图层配置',drawerIcon: ({focused, size}) => (<Ioniconsname="globe-outline"size={size}color={focused ? '#7cc' : '#ccc'}/>),}}></Drawer.Screen><Drawer.Screen name="YDLXDTNavigator" component={YDLXDTNavigator}   options={{title: '离线地图',drawerIcon: ({focused, size}) => (<MaterialIconsname="workspaces-outline"size={size}color={focused ? '#7cc' : '#ccc'}/>),}}/><Drawer.Screen name="GEONavigator" component={GEONavigator}   options={{title: 'Geo',drawerIcon: ({focused, size}) => (<MaterialIconsname="workspaces-outline"size={size}color={focused ? '#7cc' : '#ccc'}/>),}}/></Drawer.Navigator></NavigationContainer></ThemeProvider>);
}

http://www.ppmy.cn/news/1016194.html

相关文章

SpringBoot整合达梦数据库

近期接到了一个需要国产化的项目&#xff0c;用到了达梦数据库&#xff0c;没想到一开始配置就出现了问题&#xff0c;下面把配置给大家粘贴出来&#xff0c;大家少踩点坑。 一、先下载达梦数据库 这是达梦数据库下载链接&#xff0c;达梦数据库没有免费的&#xff0c;个人好…

初识mysql数据库之引入mysql客户端库

目录 一、下载第三方库 1. 准备工作 1. 使用mysql官网提供的库 2. yum源安装 二、测试第三方库是否可用 三、mysql常用接口介绍 1. 查看官方文档 2. 初始化 3. 关闭mysql 4. 连接mysql 5. 下达sql指令 四、一个简单的C客户端库连接mysql程序 1. 头文件 2. 初始化…

Stable Diffuion webui Mac版本安装过程

系统环境 操作系统&#xff1a;MacOS Ventura13.5 芯片&#xff1a;Apple M2 Max Python: 3.10 安装前置准备 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git注意事项&#xff1a;修改源码内全部 git clone 链接&#xff0c;设置代理 https://ghpr…

Node.js新手在哪儿找小项目练手?

前言 可以参考一下下面的nodejs相关的项目&#xff0c;希望对你的学习有所帮助&#xff0c;废话少说&#xff0c;让我们直接进入正题>> 1、 NodeBB Star: 13.3k 一个基于Node.js的现代化社区论坛软件&#xff0c;具有快速、可扩展、易于使用和灵活的特点。它支持多种数…

代理设计模式——静态代理和动态代理

代理模式 在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式&#xff0c;在代理模式中&#xff0c;我们创建具有现有对象的对象&#xff0c;以便向外界提供功能接口。 意图&#xff1a;为其他对象提…

无人车沿着指定线路自动驾驶与远程控制的实践应用

有了前面颜色识别跟踪的基础之后&#xff0c;我们就可以设定颜色路径&#xff0c;让无人车沿着指定线路做自动驾驶了&#xff0c;视频&#xff1a;PID控制无人车自动驾驶 有了前几章的知识铺垫&#xff0c;就比较简单了&#xff0c;也是属于颜色识别的一种应用&#xff0c;主要…

【基础类】—前后端通信类系统性学习

一、什么是同源策略及限制 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。源&#xff1a;协议、域名和端口&#xff0c; 默认端口是80 三者有一个不同&#xff0c;即源不同&#xff0c;就是跨域 ht…

LeetCode 30题:串联所有单词的子串

题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 "…