expo react-native
2015-10-19 22:50:05 jjvls13 阅读数 389

React- Native这个框架比较特殊,它展示View的方式依然是Native的View,然后也是可以通过URL的方式来动态生成View。而且,React-Native也提供了一个Bridge通道来做Javascript和Objective-C之间的交流,还是很贴心的。

然而研究了一下发现有一个比较坑的地方在于,解析JS要生成View时所需要的View,是要本地能够提供的。举个例子,比如你要有一个特定的 Mapview,并且要响应对应的delegate方法,在React-Native的环境下,你需要先在Native提供这个Mapview,并且自己实现这些delegate方法,在实现完方法之后通过Bridge把数据回传给JS端,然后重新渲染。

在这种情况下我们就能发现,其实 React-Native在使用View的时候,这些View是要经过本地定制的,并且将相关方法通过RCT_EXPORT_METHOD暴露给 js,js端才能正常使用。在我看来,这里在一定程度上限制了动态部署时的灵活性,比如我们需要在某个点击事件中展示一个动画或者一个全新的view,由于本地没有实现这个事件或没有这个view,React-Native就显得捉襟见肘。

优点

响应速度很快,只比Native慢一点,比webview快很多。

能够做到一定程度上的动态部署

缺点

组装页面的元素需要Native提供支持,一定程度上限制了动态部署的灵活性。

总结

由 于React-Native框架中,因为View的展示和View的事件响应分属于不同的端,展示部分的描述在JS端,响应事件的监听和描述都在 Native端,通过Native转发给JS端。所以,从做动态部署的角度上讲,React-Native只能动态部署新View,不能动态部署新 View对应的事件。当然,React-Native本身提供了很多基础组件,然而这个问题仍然还是会限制动态部署的灵活性。因为我们在动态部署的时候, 大部分情况下是希望View和事件响应一起改变的。

另外一个问题就在于,View的原型需要从Native中取,这个问题相较于上面一个问题倒是显得不那么严重,只是以后某个页面需要添加某个复杂的view的时候,需要从现有的组件中拼装罢了。

所以,React-Native事实上解决的是如何不使用Objc/Swift来写iOS App的View的问题,对于如何通过不发版来给已发版的App更新功能这样的问题,帮助有限。

2018-03-01 18:27:26 MrZZhou 阅读数 10611

一. 背景

react native官方现在推荐的项目构建方式是create-react-native-app,即简称CRNA,并且建议使用expo这个APP来实时查看效果。使用CRNA构建项目后,命令行输入npm start,随即会为开发者创建一个开发服务器,并打印出大大的二维码,使用expo扫码,即可预览项目,不过真的这么丝滑吗,使用中还是遇到了一些问题。

二. 踩坑记

手机和电脑均连接着同一WiFi热点,手机设备打开expo,扫描QR code,顺便吐槽下expo的扫码挺抽风的,有时候很快,有时候放弃用手输,然后界面中出现了

Something went wrong:couldn’t load exp://XXXXX network response timed out.

点击下方的view error log

uncaught error java.net.sockettimeoutexception:timedout

在网上查了下,GitHub上react相关项目中有不少issue说的就是这个问题(https://github.com/react-community/create-react-native-app/issues/270),就不卖关子了,这个问题的产生原因如错误提示,想必是和网络有关,有经验眼尖的同学就会发现run start后给出的手输访问地址,用的是以太网适配器的IP,而手机设备和电脑设备都是无线局域网连接,应该使用的是无线局域网IP,问题就是expo适配器默认选择的是以太网适配器,解决方法就是在explore手输你的无线局域网适配器IP加端口号。

本以为就可以享受丝滑了,但手输后又出现了如下报错:

20.0.0 is not a valid SDK version on Android only.后面是推荐使用啥啥啥版本的SDK

看到这个我还以为说的是Android SDK,然后在Android SDK manage中我并没有看到什么20.0.0的版本,也多安装了几个,但问题依旧,然后又去Google上搜寻了,遇到这个问题的人好像挺少的,GitHub上就看到一个相关的issue,里面提到的方法是卸载重装最新版,excuse me?还能有这种操作,服气。然后为了下到的是最新版,我就试图在expo官网上下载,expo的下载是链接到Google play上的,然后就屁颠屁颠下载了,手机上、模拟器上卸载重装了两次,发现还是一样的报错,只是20.0.0变成25.0.0,郁闷的是推荐版本中出现了20.0.0,这……就让我很郁闷这个SDK说的是啥了……

最后在stackoverflow上的一个问题中了解到,这个是expo自己的SDK,可以看看这个链接https://expo.io/tools#sdk,就是各种格式为XX.0.0 SDK版本,这应该是和不同rn版本之间有关联,所以才会有报错,我用的rn版本是0.52.0,(查看rn版本方法:react-native –version,前提是安装了react-native-cli)。所以根据expo SDK上的说明,我需要的SDK版本>=25.0.0,那么安装最新版理论上是能解决问题的,那么为什么却失败了呢?原来是expo上链到Google play的下载不是最新版的,这个真的坑,还是上面的链接,如下图,不要点击Android APP下载
下载位置
最后,搞定。

2018-10-24 09:14:21 u013702678 阅读数 93

Expo是一种很棒的方式,可以快速创建和使用您的本机应用程序。现在您也可以将Sentry与Expo一起使用,这是非常简单的待办事项:

npm i sentry-expo --save

在你的main.js或app.js中:

import Sentry from 'sentry-expo';
// import { SentrySeverity, SentryLog } from 'react-native-sentry';
Sentry.config('https://<key>@sentry.io/<project>').install();

 请注意,对于Expo,您必须使用公共DSN而不是私有DSN。这是因为Expo尚未使用本机集成,这可能会在未来版本中发生变化。

要上传源映射,您必须将其添加到exp.json或app.json

{
  // ... your existing exp.json configuration is here

  "hooks": {
    "postPublish": [
      {
        "file": "sentry-expo/upload-sourcemaps",
        "config": {
          "organization": "your team short name here",
          "project": "your project short name here",
          "authToken": "your auth token here"
        }
      }
    ]
  }
  // ...
}
2018-03-28 14:20:13 qq_30211165 阅读数 1838

背景

react native官方现在推荐的项目构建方式是create-react-native-app,即简称CRNA,并且建议使用expo这个APP来实时查看效果。使用CRNA构建项目后,命令行输入npm start,随即会为开发者创建一个开发服务器,并打印出大大的二维码,使用expo扫码,即可预览项目,不过真的这么丝滑吗,使用中还是遇到了一些问题。

二. 踩坑记

手机和电脑均连接着同一WiFi热点,手机设备打开expo,扫描QR code,顺便吐槽下expo的扫码挺抽风的,有时候很快,有时候放弃用手输,然后界面中出现了

Something went wrong:couldn’t load exp://XXXXX network response timed out.

点击下方的view error log

uncaught error java.net.sockettimeoutexception:timedout

在网上查了下,GitHub上react相关项目中有不少issue说的就是这个问题(https://github.com/react-community/create-react-native-app/issues/270),就不卖关子了,这个问题的产生原因如错误提示,想必是和网络有关,有经验眼尖的同学就会发现run start后给出的手输访问地址,用的是以太网适配器的IP,而手机设备和电脑设备都是无线局域网连接,应该使用的是无线局域网IP,问题就是expo适配器默认选择的是以太网适配器,解决方法就是在explore手输你的无线局域网适配器IP加端口号。

本以为就可以享受丝滑了,但手输后又出现了如下报错:

20.0.0 is not a valid SDK version on Android only.后面是推荐使用啥啥啥版本的SDK

看到这个我还以为说的是Android SDK,然后在Android SDK manage中我并没有看到什么20.0.0的版本,也多安装了几个,但问题依旧,然后又去Google上搜寻了,遇到这个问题的人好像挺少的,GitHub上就看到一个相关的issue,里面提到的方法是卸载重装最新版,excuse me?还能有这种操作,服气。然后为了下到的是最新版,我就试图在expo官网上下载,expo的下载是链接到Google play上的,然后就屁颠屁颠下载了,手机上、模拟器上卸载重装了两次,发现还是一样的报错,只是20.0.0变成25.0.0,郁闷的是推荐版本中出现了20.0.0,这……就让我很郁闷这个SDK说的是啥了……

最后在stackoverflow上的一个问题中了解到,这个是expo自己的SDK,可以看看这个链接https://expo.io/tools#sdk,就是各种格式为XX.0.0 SDK版本,这应该是和不同rn版本之间有关联,所以才会有报错,我用的rn版本是0.52.0,(查看rn版本方法:react-native –version,前提是安装了react-native-cli)。所以根据expo SDK上的说明,我需要的SDK版本>=25.0.0,那么安装最新版理论上是能解决问题的,那么为什么却失败了呢?原来是expo上链到Google play的下载不是最新版的,这个真的坑,还是上面的链接,如下图,不要点击Android APP下载
下载位置

2019-01-11 07:31:31 qq_26744901 阅读数 91

在模拟器中

command+alt+I 打开开发人员工具,需要多按几次

command+R 重新加载并连接

没有更多推荐了,返回首页