热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ReactNative组件开辟指南

ReactNative的组件开辟一向处在一个比较为难的处境。在官方未赋予相干示例与脚手架的情况下,社区中依旧诞生了许很多多的ReactNative组件。由于缺少示例与范例,很多组件

React Native的组件开辟一向处在一个比较为难的处境。在官方未赋予相干示例与脚手架的情况下,社区中依旧诞生了许很多多的React Native组件。由于缺少示例与范例,很多组件库仅含有一个index.js文件。这类基本的目次构造也致使了一些不言而喻的题目,比方“怎样测试”,“怎样预览”,“怎样开辟”……本文将为列位供应一种React Native组件开辟的示例目次构造相干设置指南

示例目次构造

.
├── src
│ └── index.js
├── test
│ └── index.test.js
├── demo
│ ├── .gitignore
│ ├── .watchmanconfig
│ ├── App.js
│ ├── app.json
│ ├── babel.config.js
│ ├── metro.config.js
│ └── package.json
├── .eslintrc.js
├── babel.config.js
├── README.md
├── .gitignore
└── package.json

目次构造重要区分为4块内容根目次src目次test目次demo目次

根目次包括了eslint设置babel设置README, gitignore, package.json。个中babel设置package.json中依靠定义是为了运转测试用例而存在的。

src目次包括了当前React Native组件的源码,是组件开辟最重要的目次。

test目次包括了当前React Native组件的测试相干代码。

demo目次包括了一个自力的Expo项目,个中App.js文件是开辟组件示例最重要文件,个中会援用src目次中供应的组件来举行开辟与展现。该目次的设置概况会在下文中继续睁开。

为什么用Expo来举行开辟与展现?

Expo是一个基于React Native包裹的React Native运用开辟框架。很多React Native的开辟者关于Expo依旧持怀疑态度。不可否认的是用Expo来开辟React Native运用确切存在一些题目,比方:

  • 引入Expo SDK后,运用体积过大的题目
  • 缺少运用在背景运转的才能
  • …

然则绝大多数Expo的弊病是我们在组件开辟中不会碰到或许能够避开的,那末随之而来的就是Expo的长处:

  • 疾速装置与上手
  • 疾速在网页、模拟器、实机上预览或测试
  • 与React Native的无缝兼容性

置信开辟过React Native的同砚一定会埋怨它极重的依靠装置,与烦琐的调试历程,而Expo恰好轻量化了这两个历程,不仅加快了我们的组件开辟预览,也在我们的组件目次中去除了Native端相干的代码,轻量化了我们的目次构造

相干设置指南

引入Expo

为组件项目引入Expo能够没有听上去这么轻易,由于我们在上文的目次构造中将src目次定义成与demo目次平行的目次构造,这就致使了metro(React Native打包东西)的默许设置将没法一般打包demo目次中的React Native代码。为了处理这个题目,我们就须要手动去调解metro的设置文件,而metro设置文档又以“精简”著称,因而设置metro便成了一个极大的困难点。

准备工作

起首我们须要装置Expo CLI东西

$ npm install -g expo-cli

在组件库的根目次中运转

$ expo init demo

然后挑选

  • blank template
  • managed workflow

你便在demo目次中天生了一个可运转的Expo项目, 能够经由过程运转以下敕令来预览当前的Expo项目

$ cd demo
$ yarn start

设置metro

旧版本metro一般运用
rn-cli.config.js作为设置文件名,而新版本则运用
metro.config.js作为设置文件名。旧版本
metro的设置文件花样也与新版本有较大的差异。本文将重点关注新版本
metro的设置。

demo目次中建立名为metro.config.jsmetro设置文件,并在Expo的运用设置文件app.json中增加以下字段用于重置项目根目次设置与注入自定义的metro设置文件

"packagerOpts": {
"projectRoots": "",
"config": "metro.config.js"
}

metro.config.js中增加以下内容

const path = require('path');
const blacklist = require('metro-config/src/defaults/blacklist');
const escapeRegexString = require('escape-regex-string');
module.exports = {
resolver: {
blacklistRE: blacklist([
new RegExp(
`^${escapeRegexString(path.resolve(__dirname, '..', 'node_modules'))}\\/.*$`,
),
]),
providesModuleNodeModules: [
'react-native',
'react',
'prop-types',
],
extraNodeModules: {
'@babel/runtime': path.resolve(__dirname, 'node_modules/@babel/runtime'),
},
},
projectRoot: path.resolve(__dirname),
watchFolders: [
path.resolve(__dirname, '..'),
],
};

来细致剖析一下上面的设置项

  • providesModuleNodeModules: 该设置项为当前项目供应分外的providesModule途径剖析名。providesModule简朴来讲就是一个供应文件途径别号的手腕。比方在一个文件头部增加以下的解释,你就可以够在项目别处经由过程import test from 'test'直接引入该文件。

    /**

*/
```

在这里我们将注入在src目次中被援用的三个库react-native, react, prop-types,使得src目次中的援用能准确被metro剖析。

  • extraNodeModules: 该设置旨在为当前项目供应分外引入的模块,设置花样为[{ 模块名 : 途径 }]。我们在这里设置src目次中须要的分外模块,比方运转测试时所须要的@babel/runtime模块。
  • blackListRE: 设置一个正则,打包时疏忽掉正则匹配到的途径。在这里我们将根目次中的node_modules途径下的一切内容疏忽,目标是由于在根目次下的node_modules中会存在与demo目次node_modules中雷同的库,比方react-native, react, prop-types。这就会使得providesModule在剖析时发生重名,从而致使jest-haste-map报错。
  • projectRoot: 设置项目标根目次。
  • watchFolders: 为项目引入除projectRoot外分外的目次,在这里我们将上层的根目次到场metro的关注列表。

设置完metro,即可在App.js中引入src目次中的组件

import React from 'react';
import { StyleSheet, View } from 'react-native';
import Component from '../src';
const App = () => (
alignItems: 'center',
justifyContent: 'center',
},
});
export default App;

如今运转yarn start,就可以顺遂看到你的组件在Expo中展现了。

小结

本文重要供应了一种React Native组件的目次构造,与“怎样在一个React Native组件工程中引入一个含Expo工程的子目次”的相干设置指南。这里还须要须要申明的一点是,React Native组件的目次构造能够有千万种,本文只是供应一种可行的思绪供人人参考,若有更好的计划也迎接交换与进修。本文将重点放在了引入Expo的设置指南上,如需检察该目次构造的一切文件设置,请转至Github。

相干

  • react-native-component-cli – 疾速天生该目次构造的脚手架东西
  • react-native-hsv-color-picker – 基于该目次构造的组件案例

推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
author-avatar
命运2502901041_350
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有