Expo大作战(二十九)--expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore,
2021-04-21 02:28
简要:本系列文章讲会对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 inpackage.json
).)- 将“main”设置为“node_modules / expo / AppEntry.js”。
- 从main.js中删除Expo.registerRootComponent调用,并在根组件的类声明之前放置导出默认值。(Delete the
Expo.registerRootComponent
call frommain.js
and putexport 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; } } Expo.registerRootComponent(App); 这一部分很有用,大家慢慢体会,用到的时候,就用!
下一张继续介绍,这一篇主要介绍了:expo sdk api之
registerRootComponent(注册跟组件),
ScreenOrientation(屏幕切换),SecureStore,欢迎大家关注我的微信公众号,这篇文章是否被大家认可,我的衡量标准就是公众号粉丝增长人数。欢迎大家转载,但必须保留本人博客链接!
文章标题:Expo大作战(二十九)--expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore,
文章链接:http://soscw.com/index.php/essay/77406.html