简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网

我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981

【之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发

相关文章:

Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用

Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题

Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等

Expo大作战(四)--快速用expo构建一个app,expo中的关键术语

Expo大作战(五)--expo中app.json 文件的配置信息

Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

Expo大作战(七)--expo如何使用Genymotion模拟器

Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流

更多>>

写在二十三章以后的话,之前的翻译,不管如何,好与不好,终究是告一段落,也把expo基础理论的东西又深入的理解了一遍,后续expo大作战系列将主要介绍expo sdk的api。


SecureStore

提供在设备上本地加密和安全存储键值对的方法。 每个expo项目都有独立的存储系统,无法访问其他expo项目的存储。

iOS:使用keychain服务将值存储为kSecClassGenericPassword。 iOS有额外的选项可以设置值的kSecAttrAccessible属性,该属性控制何时可以获取值。

Android:值存储在SharedPreferences中,并使用Android的Keystore系统进行加密

Expo.SecureStore.setItemAsync(key,value,options)
存储键值对。

参数

key (string) - 与存储值关联的键。按键可能包含字母数字字符。, - 和_(Keys may contain alphanumeric characters .-, and _.)。

value (string) - 要存储的值。

选项(对象)(可选)(options (object) (optional) ) - 选项图:

keychainService (string)  -

  • iOS:该项目的服务,相当于kSecAttrService
  • Android:相当于公钥/私钥对别名

注意如果使用keychainService选项设置该项目,则需要稍后获取该值。

keychainAccessible (enum) -

仅限iOS:使用iOS的kSecAttrAccessible属性指定存储条目何时可访问。请参阅Apple关于钥匙串物品辅助功能的文档。可用的选项是:

  • Expo.SecureStore.WHEN_UNLOCKED:钥匙串项目中的数据只能在设备被用户解锁时访问。
  • Expo.SecureStore.AFTER_FIRST_UNLOCK:重启后无法访问钥匙串项目中的数据,直到用户解锁设备一次。如果您在手机锁定时需要访问该项目,这可能很有用。
  • Expo.SecureStore.ALWAYS:无论设备是否被锁定,始终可以访问钥匙串项目中的数据。这是最不安全的选择。
  • Expo.SecureStore.WHEN_UNLOCKED_THIS_DEVICE_ONLY:与WHEN_UNLOCKED类似,但从备份还原时不会将条目迁移到新设备。
  • Expo.SecureStore.WHEN_PASSCODE_SET_THIS_DEVICE_ONLY:与WHEN_UNLOCKED_THIS_DEVICE_ONLY类似,用户必须设置密码才能存储条目。如果用户删除他们的密码,该条目将被删除。
  • Expo.SecureStore.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY:与AFTER_FIRST_UNLOCK类似,但从备份还原时不会将条目迁移到新设备。
  • Expo.SecureStore.ALWAYS_THIS_DEVICE_ONLY:与ALWAYS类似,但从备份还原时不会将条目迁移到新设备。

返回

如果值无法存储在设备上,则承诺将拒绝(A promise that will reject if value cannot be stored on the device.)

Expo.SecureStore.getItemAsync(key,options)
获取与提供的密钥关联的存储值。

参数

key (string)  - 用于存储关联值的键。

options (object)  选项(对象)(可选) - 选项图:

keychainService(字符串) - iOS:项目的服务,等同于kSecAttrService。 Android:相当于公钥/私钥对别名。

注意如果使用keychainService选项设置该项目,则需要稍后获取该值。

返回

解析为先前存储的值的承诺;如果没有给定键的条目,则为null。 如果在检索值时发生错误,承诺将拒绝。

Expo.SecureStore.deleteItemAsync(键,选项)
删除与提供的密钥关联的值。

参数

key (string)  - 用于存储关联值的键。

options (object)  选项(对象)(可选) - 选项图:

keychainService(字符串) - iOS:项目的服务,等同于kSecAttrService。 Android:相当于公钥/私钥对别名。 如果该项目使用KeychainService进行设置,则需要稍后获取该值。

返回

如果价值无法删除,承诺将拒绝。

用这个做本地化储存的话,要安全些,这也是他的优点,提供在设备上本地加密和安全存储键值对的方法。 每个expo项目都有独立的存储系统,无法访问其他expo项目的存储。

 

ScreenOrientation

允许在运行时更改支持的屏幕方向。 这将优先于app.json中的方向键。

Expo.ScreenOrientation.allow(orientation)

允许屏幕方向。 您可以使用多个方向多次调用此函数以允许多个方向。

参数

orientation (string)  - 允许的方向。 有关可能的值,请参阅方向枚举。

function changeScreenOrientation() {
  Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
}

Expo.ScreenOrientation.Orientation

包含可以传递给allow函数的值的对象。(几种枚举类型,代表可以传递给Expo.ScreenOrientation.allow(orientation)的参数

  • ALL - 所有4种可能的方向
  • ALL_BUT_UPSIDE_DOWN - 除了反向肖像之外,可能是某些Android设备上的所有4种方向。
  • PORTRAIT  - 肖像取向,也可能是某些Android设备上的反向肖像。
  • PORTRAIT_UP - 仅限上行肖像。(Upside portrait only.)
  • PORTRAIT_DOWN - 仅限颠倒肖像。
  • LANDSCAPE - 任何风景定位。
  • LANDSCAPE_LEFT - 仅限左侧风景。
  • LANDSCAPE_RIGHT - 仅限右侧景观。

      下为原文:

  • ALL — All 4 possible orientations

  • ALL_BUT_UPSIDE_DOWN — All but reverse portrait, could be all 4 orientations on certain Android devices.

  • PORTRAIT — Portrait orientation, could also be reverse portrait on certain Android devices.

  • PORTRAIT_UP — Upside portrait only.

  • PORTRAIT_DOWN — Upside down portrait only.

  • LANDSCAPE — Any landscape orientation.

  • LANDSCAPE_LEFT — Left landscape only.

  • LANDSCAPE_RIGHT — Right landscape only.

检测方向何时改变(Detecting when the orientation changes)

做到这一点的最好方法是监听对尺寸的更改。(The best way to do this is to listen for changes to Dimensions.)

 

registerRootComponent

Expo.registerRootComponent(component)

设置expo用于您的应用程序的主要组件。

注意:在SDK 18之前,有必要直接使用registerRootComponent,但对于从SDK 18或更高版本创建的项目,这将在Expo SDK中自动处理。

参数

component(ReactComponent) - 呈现应用程序其余部分的React组件类。

返回

没有返回值。(No return value.)

注意:Expo.registerRootComponent大致相当于React Native的AppRegistry.registerComponent,并提供一些额外的挂钩来提供Expo的特定功能(是对AppRegistry.registerComponent的又一个高层的封装)。

常见问题

我在SDK 18之前创建了我的项目,并且我想要移除Expo.registerRootComponent,我该怎么做?

  • 在继续之前,请确保您的项目在SDK 18或更高版本上运行。
  • 打开main.js(或者如果你改变它,无论你的“main”是在package.json中)。(Open up main.js (or if you changed it, whatever your "main" is in package.json).)
  • 将“main”设置为“node_modules / expo / AppEntry.js”。
  • 从main.js中删除Expo.registerRootComponent调用,并在根组件的类声明之前放置导出默认值。(Delete the Expo.registerRootComponent call from main.js and put export default before your root component’s class declaration.)
  • 将main.js重命名为App.js.

如果我想将我的主应用程序文件命名为App.js以外的东西,该怎么办?

您可以将package.json中的“main”设置为项目中的任何文件。 如果你这样做,那么你需要使用registerRootComponent; 如果您使用自定义条目文件,导出默认值将不会使该组件成为expo应用程序的根。

例如,假设您希望将“src / main.js”作为应用程序的条目文件 - 例如,您可能不喜欢在项目根目录中包含JavaScript文件。 首先,在package.json中设置它:

{
  "main": "src/main.js"
}

然后在“src / main.js”中,确保你调用了registerRootComponent(),并将你想渲染的组件传递给应用程序的根目录。

import Expo from 'expo';
import React from 'react';
import { View } from 'react-native';

class App extends React.Component {
  render() {
    return <View />;
  }
}

Expo.registerRootComponent(App);

这一部分很有用,大家慢慢体会,用到的时候,就用!


下一张继续介绍,这一篇主要介绍了:expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore欢迎大家关注我的微信公众号,这篇文章是否被大家认可,我的衡量标准就是公众号粉丝增长人数。欢迎大家转载,但必须保留本人博客链接!

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!