RN 尝鲜之旅

news2024/11/23 9:14:19

React Native 一直没使用过,闲来无事,还是尝鲜了一下下。

目前还没有出新手村,所以写的东西不一定具有任何参考价值,见谅。

关于 RN 的一些说明

RN 与 R

RN 与 R 的区别:来自掘金的一篇文章

  1. RN 与 R 不一样,虽然他们的语法规范,理念各种是类似的,但是 RN 就是 RN,不是R。 (RN === React NativeR === React )

R 的代码直接放到 RN 项目是不能运行的,因为里面的标签啊,各种不完全一样。

  1. RN 与 R 不一样,R 只能运行到 web 端,也就是浏览器上面;RN 是为了跨平台,可以运行到 Android/iOS/Web 等各种平台。(不过一些平台强相关的代码还是要额外写,比如Android就要写一些 java/kotlin 的代码,iOS 就要写一些 oc 的代码等。)
  2. RN 与 R 一样,都是使用 JavaScript 语言的。都可以不使用 JSX 语法。(实际情况肯定是必须去使用)
  3. RN 与 R 一样,都可以使用 TypeScript 去编写。 JSX 对应的就是 TSX。

关于 RN 环境搭建

虽然我是参考了 RN中文网-环境搭建 这篇教程去搭建的,但是依然遇到了一些小问题:

我选的是 Windows 搭建 RN-android 开发环境的。

  1. 安装与配置 Node.js, npx, yarn 环境变量等没遇到问题。
  2. 安装 Android Stuio 没问题。(本地就有,不需要走这一步,但是按照教程配置 ANDROID_HOME的环境变量。)
  3. 创建项目,执行npx react-native@latest init AwesomeProject没问题。
  4. 执行 yarn android 遇到问题了。一些 gradle 依赖下载不下来,配置了阿里云 maven 也是一样。

解决方案:直接启动 Android studio ,在 AS 里面去下载 gradle 依赖,下载完成之后,启动模拟器,然后再次执行 yarn android , 就正常了。(可以在模拟器上面看到这个 app 的界面了。)
这个过程非常慢,那个教程网页上面说大概10分钟,实际上,我本地下载这些依赖至少超过了6个小时。

  1. 虽然第一次执行 yarn android很慢,但是,下次创建一个新的 project 比如 npx react-native@latest init AbcProject,然后再去执行 cd AbcProject&& yarn android, 这次就很快了。那些依赖应该是 global 的,下载一次就可以了。

关于运行

目前知道的,如果想脱离调试模式,让 rn app 正常运行的话,必须编译 release apk 才可以。否则一旦电脑上面的 Meto 服务关闭了,这个 rn app 就无法正常运行。

当然,这个对初学者无影响,初学者本来就是在学习,不需要让 app 独立运行到设备上面。~_~

关于 Hello World

RN-Android 的 hello world 也很简单,而且后面写更复杂的页面,也是只要修改/增加 RN 代码就可以了。目前来看,修改 Android 代码(也就是写Java/kotlin 这些)的场景应该很少,主要的代码都是在 RN 这块。

关于使用体验

目前来看感觉良好,不过对这种 TSX 的语法目前还不太熟悉。

效果展示

  1. 展示一下目前的尝鲜内容

实现的内容:在子组件的点击事件中调用父组件定义的函数。

  1. 贴一下代码

只有这个 App.tsx 是有改动的,其他代码都是通过 npx 创建项目的时候自带的代码。

// App.tsx
import React, { useState } from 'react';
import { Button, View } from 'react-native';


function titles(count: any, total: Number): string {
  return `Click count=[${count}], total=[${total}]`;
}


const CounterButton = (props: any) => {

  const [count, setCount] = useState(0);

  return (
    <Button
      title={titles(count, props.total)}

      onPress={() => {
        setCount(count + 1);
        props.fc();
        console.log("count=%s, total=%s", count, props.total);
      }}
      disabled={props.total > 12 || count > 12}
    />
  );
}


const App = () => {
  const [allCounts, setAllCounts] = useState(0);

  function increase(): void {
    setAllCounts(allCounts + 1);
    console.log("increase was be called, and total is:" + allCounts);
  }
  return (
    <View>
      <CounterButton total={allCounts} fc={increase}/>
      <CounterButton total={allCounts} fc={increase}/>
    </View>
  );
}

export default App;

运行效果

运行效果

为什么要展示这个效果

在参考教程一步一步走的时候,忽然想到如果要实现这种外部有个总的计数,里面分别计数的需求改怎么实现。想到了 states, props 但是不知道怎么组合来实现它。然后网上搜了很多,找到的都是使用 memo, usecallback 这些,后面仔细想想,又找到了关于 props 的一些用法,然后发现这样就可以实现,不需要使用其他的 hook.

末尾

最后的最后,欢迎大家批评指正。

另外,有时间的话,后面也许会写成一个系列,关于 RN 的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/910153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报道 | 9月国际运筹优化会议汇总

封面图来源&#xff1a; https://www.pexels.com/zh-cn/photo/1181406/ 九月召开会议汇总&#xff1a; The 96th meeting of the EURO Working Group on Multiple Criteria Decision Aiding (EWG-MCDA) Location: Paris, France Important dates: Conference: September 202…

嵌入式系统常用的开发板

今天&#xff0c;了解一下常用的开发板&#xff0c;像stm32是最近了解的&#xff0c;esp8266系列是之前大三下上物联网导论课程时候接触的&#xff0c;一些树莓派&#xff0c;Arduino听说过&#xff0c;但了解不多。

MySQL索引常见术语(索引下推、索引覆盖、最左匹配等)

一:背景 我们在面试中都知道,对于MySQL索引是必问的。大家也应该都知道MySQL的数据结构,什么是索引。其中在面试中,面试官也经常问,你做过哪些优化?本文主要是介绍MySQL索引的一些常见术语,比如索引下推、索引覆盖、最左匹配等,这些其实也是MySQL优化的一部分,能够熟练…

谷歌浏览器推出全新功能:可自动检测恶意软件!

近日&#xff0c;谷歌正在测试 Chrome 浏览器的一项新功能。该功能可在已安装的扩展程序从 Chrome 网上商城删除时向用户发出恶意软件提示警告。 在Chrome 应用商店里一直有人源源不断的发布浏览器扩展程序&#xff0c;有很多都会通过弹出式广告和重定向广告进行推广。 这些扩…

社交工程和钓鱼攻击防范: 分析针对人类心理和社交工程的攻击技术,并介绍预防这些攻击的方法

第一章&#xff1a;引言 随着科技的不断进步&#xff0c;网络安全问题愈发凸显。在这个数字化时代&#xff0c;社交工程和钓鱼攻击成为黑客们获取敏感信息的常用手段。这些攻击不是基于技术漏洞&#xff0c;而是利用人类心理弱点来进行。本文将深入探讨社交工程和钓鱼攻击的原…

一个改进型的差分运放分析

在使用单个集成运放构成的加减运算电路时&#xff0c;存在两个缺点&#xff1a;一是电阻的选取和调整不方便&#xff0c;而是对于每个信号源的输入电阻均较小&#xff08;即相对于信号源内阻&#xff0c;电路的输入阻抗较小&#xff09;。 因此可以采用下图的两级电路实现差分比…

Obsidian 入门使用手册

文章目录 一、Obsidian 入门1.1 什么是 Obsidian1.2 安装 Obsidian 二、Obsidian 配置2.1 创建第一个笔记2.2 设置界面语言使用中文2.3 主题 三、小结 一、Obsidian 入门 1.1 什么是 Obsidian Obsidian 是一款基于 Markdown 语法编辑的笔记软件。与传统的 Markdown 软件不同的…

图神经网络与分子表征:1. 分子图和图神经网络基础

CSDN的朋友们大家好&#xff0c;好久没写系列文章了。 近期读了很多图神经网络&#xff08;GNN&#xff09;和分子表征&#xff08;molecular representation&#xff09;的论文&#xff0c;正好最近不是很忙&#xff0c;所以我决定把自己的学习过程记录下来&#xff0c;与大家…

Python 在logging.config.dictConfig()日志配置方式下,使用自定义的Handler处理程序

文章目录 一、基于 RotatingFileHandler 的自定义处理程序二、基于 TimedRotatingFileHandler 的自定义处理程序 Python logging模块的基本使用、进阶使用详解 Python logging.handlers模块&#xff0c;RotatingFileHandler、TimedRotatingFileHandler 处理器各参数详细介绍 …

pandas连接查询

df1数据如下 df2数据如下 连接查询代码 -1 import pandas as pddf1 pd.DataFrame({id:[1001,1002,1003,1004],name:[Hu,Dotu,Evp,Swe]}) df2 pd.DataFrame({id:[1001,1001,1003,1004, 1003],course:[c1,c2,c3,c2,c1],score:[100, 98, 64, 84, 69]})result pd.merge(df1, df…

【C++初阶】vector容器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

0007Java程序设计-jsp问卷调查系统设计与实现

摘 要 随着社会不断进步与发展&#xff0c;生活节奏不断加快&#xff0c;信息已经成为我们生活中不可缺少的一部分&#xff0c;很多企业需要掌握大量的信息来了解特定用户的需求&#xff0c;传统的做法是组织大量的人力物力对用户散发调查表&#xff0c;然后对收集的信息进行统…

python 基础篇 day 1 初识变量和数据类型

文章目录 变量变量作用——用于存储和表示数据。变量命名规则命名法大驼峰小驼峰下划体n j i a x 通常作为临时变量使用 建议 变量种类全局变量&#xff08;Global Variables&#xff09;局部变量&#xff08;Local Variables&#xff09;静态变量&#xff08;Static Variables…

linux常用基础命令与文件结构汇总

1 学习目标 说出Linux下的目录结构和常见目录的作用熟练使用Linux下的相对路径和绝对路径熟练使用Linux下常用文件和目录操作相关的命令熟练使用修改用户权限、用户和用户组相关的命令熟练使用文件的查找和检索相关的命令熟练掌握Ubuntu下的软件安装和卸载熟练使用压缩工具完成…

七夕节日表白:七大网页风格与其适用人群

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

YOLOv5源码中的参数超详细解析(5)— 验证部分val(test).py

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5项目代码中&#xff0c;val.py 是一个代表验证&#xff08;validation&#xff09;的 Python 脚本文件名。通常在机器学习或深度学习的任务中&#xff0c;我们会将数据集分为训练集和验证集&#xff0c;使用训练集来…

请说人话!如何理解基本分页存储管理

一、默认设定 &#xff08;一&#xff09;按字节编制一个房间可以装8只猪猪 现在的计算机一般都是按字节编址的。这个不理解的话&#xff0c;可以看我的文章为什么20位地址总线决定寻址空间是1MB“http://t.csdn.cn/Eo2nE” &#xff08;二&#xff09;内存采用非连续分配方…

法线矩阵推导

法线矩阵推导 https://zhuanlan.zhihu.com/p/72734738 https://juejin.cn/post/7113952418613690382 https://blog.csdn.net/wangjianxin97?typeblog 1、为什么需要法线矩阵 vec3 normalEyeSpace modelViewMatrix * normal;如果模型矩阵执行了非等比缩放, 顶点的改变会导致法…

基于蝴蝶算法优化的BP神经网络(预测应用) - 附代码

基于蝴蝶算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于蝴蝶算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.蝴蝶优化BP神经网络2.1 BP神经网络参数设置2.2 蝴蝶算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

sNMFcross-entropyK

0.简单介绍 稀疏非负矩阵&#xff08;sNMF&#xff09;和最小二乘优化来产生祖先比例估计数的祖先推断算法&#xff0c;这个算法呢与admixture来说差别不是很大&#xff0c;但是优点就是快&#xff0c;运算速度可以快到10-30倍左右。 1.安装 这一步不必多说&#xff0c;下载…