React Native 团队怎么看待 Flutter 的?终于有官方回复了
昨天 React Native 官方团队在 reddit 上发起了一次 AUA(ask us anything)活动,地址在文末。看到这个活动的时候,我脑海里想到的第一个问题就是,他们怎么看待 Flutter 的?结果打开活动后,发现已经有人问了,而且还得到了官方的回复。
提问者:
你们是怎么看待 Flutter 的,和 Flutter 比起来 React Native 有什么优劣?
官方回复:
我认为 React Native 和 Flutter 的目标是完全不同的,因此在实现上也采取了完全不同的方法,所以如何看待二者,就取决于你要达到什么样的目的了。举例来说,React Native 更倾向于将每个平台各自的特性和组件样式进行保留,而 Flutter 是通过自己的渲染引擎去渲染组件样式,以代替平台原生的效果。这取决于你想做什么以及想做成什么样,这个应该就是你最需要考虑的事情了。
话里有话:
看完了也没说哪里好,哪里不好,很标准的官方回复。看来是早就想好了答案,算准了肯定会有人问这个。而且看完这个回复,我感觉像是在说:“小孩才做选择,大人就都要!”
除了这个绕不开的问题以外,还有一个我认为比较关键的问题,就是关于 React Native 未来的发展。当然,这个问题也有人问了,就排在热门第一个。
提问者:
React Native 已经发布了有 4 年之久了,想问下你们对它未来 4 年的发展有什么想法呢?
官方回复:
我认为未来 React Native 的发展将有两个阶段。
在第一个阶段发展结束的时候,我认为 React Native 将成为一个把 React 语法带到任何一个原生平台上的框架。现在我们已经可以看到,通过 Fabric 以及 TurboModules 会让 React Naitve 变得更易用更通用。我希望 React Native 可以支持任何移动、桌面、AR/VR 平台。目前我们应该也可以看到,公司希望 React Native 能运行在除了 Android 和 iOS 以外的设备上。
在我开始讲述第二阶段前,首先需要明白我们要通过 React Native 达到什么目的是非常重要的,我们在尝试把 React 带到原生界面开发中。我们认为 React 在表现力、直观性以及灵活性之间,做到了一个非常好的平衡,以提供良好的性能和灵活的界面。
在第二阶段发展结束的时候,我认为 React Native 将会重新回归 "React",这意味着很多事情,并且他的定位也会更加模糊。但是,这意味着在 React Native 和 React for web 之间更加聚合与抽象。这可能意味着会将抽象的级别提高到目前开发人员熟悉的 Web 水平上来。然而有趣的是,Twitter 整个网站已经使用 React Native(react-native-web)编写了。虽然这看起来像“代码共享”的 holy grail。但其实没有必要,我相信它可以在任何平台上都能带来高质量的体验。
话里有话:
这段话的大概意思就是,未来,第一阶段,React Native 计划先把 React 搬到所有原生平台上,然后第二阶段,就是逐渐抹平 React Native 和 React for web 之间的区别,代码会朝着 Web 开发者熟悉的方向进行抽象和聚合
从这段话中,给我的感觉像是在说,React Native 是 React 的扩充而已,不要老拿我们和 Flutter 比,我们不一样,OK?至于未来怎么发展,那肯定是不会脱离我们庞大的 React 用户群体的。这本来就不是开发出来给你们原生开发者用的,而是给 Web 开发者扩充技能栈的。这么说,可能也是想避开和 Flutter 的正面交锋吧?毕竟在原生开发领域,Google 的技术积累比 Facebook 还是要深厚。
现在这个活动已经有超过 200 多条回复了,其中有很多大家比较关心的问题,我觉得所有在用 React Native 的开发者都可以去看一下。由于内容实在是太多了,我也就不逐一翻译了。
还有一点需要特别提一下,React Native 为什么要在这个时候搞这次 AUA 活动呢?正如他们在活动详情里提到的,因为 RN0.59 正式版马上就要发布了,官方宣称这次更新带来了“非常值得期待”的更新,所以可能是想出来好好宣传一下吧。
如果你也有关注 React Native 开发,可以关注我的公众号,会不定时分享一些国内外的动态,当然不只有 React Native,也会分享一些关于移动开发的其他原创内容。
围观地址:(要梯子)
https://www.reddit.com/r/reactnative/comments/azuy4v/were_the_react_native_team_aua/
收起阅读 »
RN几种脚手架工具的使用和对比(react-native-cli、create-react-native-app、exp)
1、react-native-cli
无法使用exp服务
react-native init program-name #初始化项目
npm start(react-native start) #在项目目录下启动 js service
react-native run-android #已连接真机或开启模拟器前提下,启动项目
react-native run-ios #已连接真机或开启模拟器前提下(仅支持mac系统),启动项目
2、create-react-native-app
create-react-native-app
是React 社区孵化出来的一种无需构建配置就可以创建>RN App的一个开源项目,一个创建react native应用的脚手架工具(最好用,无需翻墙
初始化后项目可使用exp服务
安装使用
npm install -g create-react-native-app #全局安装
使用create-react-native-app来创建APP
create-react-native-app program-name #初始化项目
cd program-name #进入项目目录
npm start #启动项目服务
create-react-native-app常用命令
npm start #启动本地开发服务器,这样一来你就可以通过Expo扫码将APP运行起来了
npm run ios #将APP运行在iOS设备上,仅仅Mac系统支持,且需要安装Xcode
npm run android #将APP运行在Android设备上,需要Android构建工具
npm test # 运行测试用例
如果本地安装了
yarn
管理工具,会提示使用yarn
命令来启动管理服务
运行项目
用
Expo
App扫码启动项目服务屏幕上自动生成的二维码,program-name就可以运
行在Expo
App上
expo下载配置参考下一条
3、Expo
Expo是一组工具、库和服务,可以通过编写JavaScript来构建本地的ios和Android应用程序
需翻墙使用,下载资源速度慢
安装使用
PC上通过命令行安装expo服务
1、npm install exp --global #全局安装 简写: npm i -g exp
手机上安装Expo Client App(app store上叫Expo Client)
安装包下载地址:expo官网
手机安装好后注册expo账号(必须,后续用于PCexpo
服务直接通过账号将项目应用于expo app)
提示:为了确保Expo App能够正常访问到你的PC,你需要确保你的手机和PC处于同一网段内或者他们能够联通
初始化一个项目(Create your first project)
2、exp init my-new-project #初始化项目,会要求你选择模板
The Blank project template includes the minimum dependencies to run and an empty root component 空白项目模板包含运行的最小依赖项和空白根组件
The Tab Navigation project template includes several example screens Tab Navigation项目模板包含几个示例屏幕
报错:
Set EXPO_DEBUG=true in your env to view the stack trace. 报错如下图
解决方法:下载Expo XDE(PC客户端使用) --初始化项目需翻墙
注:使用命令行初始化项目可能会卡在下载react-native资源,可转换成XDE初始化项目,再使用命令行启动项目并推送
3、cd my-new-project #进入项目目录
4、exp start #启动项目,推送至手机端
启动项目后会要求你输入你在App上注册的Expo账号和密码
初始化后项目结构
主要windows下android目录结构
|- program-name | 项目工作空间
|- android | android 端代码
|- app | app 模块
|- build.gradle | app 模块 Gradle 配置文件
|- progurad-rules.pro | 混淆配置文件
|- src/main | 源代码
|- AndroidManifest.xml | APK 配置信息
|- java | 源代码
|- 包名 | java 源代码
|- MainActivity.java | 界面文件, (加载ReactNative源文件入口)
|- MainApplication.java | 应用级上下文, (ReactNative 插件配置)
|- res | APK 资源文件
|- gradle | Gradle 版本配置信息
|- keystores | APK 打包签名文件(如果正式开发需要自己定义修改签名文件)
|- gradlew | Gradle运行脚本, 与 react-native run-android 有关
|- gradlew.bat | Gradle运行脚本, 与 react-native run-android 有关
|- gradle.properties | Gradle 的配置文件, 正常是 AndroidHome, NDK, JDK, 环境变量的配置
|- build.gradle | Gradle的全局配置文件, 主要是是配置编译 Android 的 Gradle 插件,及配置 Gradle仓库
|- settings.gradle | Gradle模块配置
|- ios | iOS 端代码
|- node_modules | 项目依赖库
|- package.json | node配置文件, 主是要配置项目的依赖库,
|- index.android.js | Android 项目启动入口
|- index.ios.js | iOS 项目启动入口
|- program-name | 项目工作空间
|- android | android 端代码
|- app | app 模块
|- build.gradle | app 模块 Gradle 配置文件
|- progurad-rules.pro | 混淆配置文件
|- src/main | 源代码
|- AndroidManifest.xml | APK 配置信息
|- java | 源代码
|- 包名 | java 源代码
|- MainActivity.java | 界面文件, (加载ReactNative源文件入口)
|- MainApplication.java | 应用级上下文, (ReactNative 插件配置)
|- res | APK 资源文件
|- gradle | Gradle 版本配置信息
|- keystores | APK 打包签名文件(如果正式开发需要自己定义修改签名文件)
|- gradlew | Gradle运行脚本, 与 react-native run-android 有关
|- gradlew.bat | Gradle运行脚本, 与 react-native run-android 有关
|- gradle.properties | Gradle 的配置文件, 正常是 AndroidHome, NDK, JDK, 环境变量的配置
|- build.gradle | Gradle的全局配置文件, 主要是是配置编译 Android 的 Gradle 插件,及配置 Gradle仓库
|- settings.gradle | Gradle模块配置
|- ios | iOS 端代码
|- node_modules | 项目依赖库
|- package.json | node配置文件, 主是要配置项目的依赖库,
|- index.android.js | Android 项目启动入口
|- index.ios.js | iOS 项目启动入口
package.json文件说明
dependencies
- 项目的依赖配置
- 依赖配置,配置信息配置方式
- “version” 强制使用特定版本
- “^version” 兼容版本
- “git…” 从 git版本控制地址获取依赖版本库
- “path/path/path” 指定本地位置下的依赖库
- “latest” 使用最新版本
- “>version” 会在 npm 库中找最新的版本, 并且大于此版本
- “>=version” 会在 npm 库中找最新的版本, 并且大于等于此版本“
- 依赖配置,配置信息配置方式
devDependencies
- 开发版本的依赖库
version
- js 版本标志
description
- 项目描述, 主要使用于做第三方支持库时,对库的描述信息
main
- 项目的缺省入口
engines
- 配置引擎版本信息, 如 node, npm 的版本依赖
**index.*.js
新版RN统一入口:index.js
- 正常只作为项目入口,不做其他业务代码处理
注:
1、虚拟机上很消耗电脑内存, 建议使用真机进行安装测试
链接:https://juejin.cn/post/6844903599793766413
收起阅读 »
IPFS对标HTTP,IPFS的优势是什么?
区块链技术的高速发展,离不开底层技术的支持,而且肯定先于区块链技术的发展。目前来看,IPFS—Filecoin是最有可能成为区块链底层基础设施的技术。这也表明IPFS—Filecoin必然会随之快速发展。造成这一现象的原因之一在于区块链技术本身的限制,它不能存储存储数据,这也是自区块链技术诞生之后限制区块链技术发展的重要原因之一。IPFS矿机布局,避免踩坑(FIL37373)
Filecoin与IPFS(InterPlanetary File System,星际文件系统)是近两年来非常热门的概念。所谓IPFS是一个基于内容寻址的、分布式的、新型超媒体传输协议。IPFS支持创建完全分布式的应用。它旨在使用网络更快、更安全、更开放。IPFS是一个分布式文件系统,它的目标是将所有计算设备连接到同一个文件系统,从而成为一个全球统一的储存系统。而Filecoin是IPFS的激励层。
IPFS对标HTTP,IPFS的优势是什么?
IPFS星际文件存储系统,是一种p2p协议。相对于传统云存储有以下几个优点:
1. 便宜。IPFS存储空间不由服务商提供,而是接入网络的节点来提供,可以说是任何人都可以成为节点的一部分,所以非常便宜。
2. 速度快。IPFS协议下,文件冗余存储在世界各地,类似于CDN一样。当用户发起下载请求时,附近的借点都会收到信息并传送文件给你,而你只接收最先到达的文件。而传统云服务依赖于中心服务器到你的主机的线路和带宽。IPFS矿机布局,避免踩坑(FIL37373)
3. 安全性高。目前没有任何云存储敢保证自己的服务器不会遭到黑客袭击并保证数据安全。但是IPFS协议下文件在上传的时候会在每个节点保留其记录,系统检测单到文件丢失的时候会自动恢复。且由于其分布性存储的特征,黑客无法同时攻击所有节点。IPFS矿机布局,避免踩坑(FIL37373)
4.隐私保护。对于加密文件的上传使用非对称加密的方式,即除非对方掌握了私钥,否则无法破解。
IPFS分布式存储结构,各项数值优于HTTP,且发布区块链项目Filecoin,能够为IPFS技术存储提供足够的微型存储空间(节点),IPFS,与Filecoin即形成紧密的共生关系,相辅相成。
IPFS网络要想稳定运行需要用户贡献他们的存储空间、网络带宽,如果没有恰当的奖励机制,那么巨大的资源开销很难维持网络持久运转。受到比特币网络的启发,将Filecoin作为IPFS的激励层就是一种解决方案了。对于用户而言,Filecoin能够提高存取速度和效率,能带来去中心化的应用;对于矿工,贡献网络资源可以获得一笔不错的收益。
收起阅读 »基于环信 sdk 在uni-app框架中快速集成开发的一款多平台社交Demo
说在前面:此款 demo 是基于 环信sdk 开发的一款具有单聊、群聊、聊天室、音视频等功能的应用。在此之前我们已经开发完 Vue、react(web端)、微信小程序。这三个热门领域的版本,如有需要源码可以留言给我
Git 源码地址: https://github.com/easemob/webim-uniapp-demo
一、安装开发工具
我们选用微信小程序来用做示例(如果选择百度、支付宝安装对应开发者工具即可)、
微信开发者工具
建议还是安装最新版的。uni-app
的开发也必须安装HBuilderX
工具,这个是捆绑的,没得选择。要用uni-app
,你必须得装!
工具安装:
项目demo介绍:
项目demo启动预览:
快速集成环信 sdk:
1、复制整个utils文件
如果你想具体了解主要配置文件 请看这个链接:
https://docs-im.easemob.com/im/web/intro/start
2、如何使用环信的appkey ,可以在环信 console 后台注册一个 账号申请appkey ,可以参考这里 ,获取到 appkey 以后添加到配置文件中 ,如下图所示:
以上两个重要的配置准备完成之后就可以进行一系列的操作了(收发消息、好友申请、进群入群通知等)
在uni-app中 使用环信 sdk 实现添加、删除好友:
1、在全局 App.vue 文件 钩子函数 onLaunch() 中监听各种事件 (好友申请、收到各类消息等)如图:
发送好友请求:
在onPresence(message)
事件中接收到好友消息申请:
同意好友请求:
拒绝好友请求:
实现收发消息:
1、给好友发送消息:
2、接收到消息:
在onTextMessage(message)
事件中接收到好友消息,然后做消息上屏处理(具体消息上屏逻辑可看demo中代码示例):
以上展示的仅仅为基本业务场景,更多的业务逻辑详情请看demo示例。api具体详情可以查看 环信sdk 文档
PS:对于安卓、iOS移动端,我们已经兼容完成。想通过uni-app生成安卓、ios应用的小伙伴们可以愉快的使用起来了~~~
基于uni-app的开发其中也趟了不少坑,在这里就不多赘述了。回归到框架的选型来讲,选用uni-app
开发小程序,可同时并行多端小程序,这点是真香,一次开发多端发布。至于审核嘛~ 时快时慢
最后的最后:如果你喜欢,请拒绝白嫖,点赞三连转发!
【含视频、课件下载】一天开发一款灵魂社交APP
视频回放:
课件下载:
零开发基础、源码共享
内容介绍:
从互联网诞生之日起,社交需求就一直作为一种刚需存在,在人际过载与信息过载时代,微信已经不再能承载我们最简单、纯粹、美好的社交需求,在社交疲态和用户迁移的产品契机下,陌生人社交领域逐渐孕育出“陌陌、探探、SOUL”等社交APP新贵。随着5G时代的到来,一波音视频社交领域的创业窗口期又重新打开。
本次课程,环信生态开发者“穿裤衩闯天下”将给我们带来一款基于环信即时通讯云(环信音视频云)开发的免费开源灵魂社交APP,分享其开发过程和项目源码,助力程序员高效开发,快速集成。
直播大纲:
(1)项目介绍
国内首个程序猿非严肃婚恋交友应用——猿匹配
(2)开发环境
在最新的Android开发环境下开发,使用Java8的一些新特性,比如Lambda表达式等
· Mac OS 10.14.4
· Android Studio 3.3.2
(3)功能介绍
· IM功能
会话与消息功能,包括图片、文本、表情等消息,还包括语音实时通话与视频实时通话功能的开发等
· APP功能
包括聊天、设置、社区等板块开发
· 发布功能
含多渠道打包、签名配置、开发与线上环境配置、敏感信息保护等
(4)配置运行
提供一些地址: