首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >hippy-react 三端同构

hippy-react 三端同构

原创
作者头像
17kidd
修改于 2020-04-07 03:27:39
修改于 2020-04-07 03:27:39
1.8K0
举报
文章被收录于专栏:17Kidd17Kidd

1. Hippy简介

1.1 简介

Hippy (https://github.com/Tencent/Hippy) 是腾讯在2019年12月20日开源跨端框架。

Hippy 在腾讯内部已经运行了3年,支持了18款线上业务,日均PV过亿,形成了一套完整的生态。

与其他跨端框架相比,Hippy紧贴W3C标准,对前端开发者更加友好,同时支持 ReactVue 两大前端主流框架

Hippy 官方文档: http://hippyjs.org/#/guide/integration

1.2 @hippy/react

@hippy/react 是基于 Facebook React 的官方自定义渲染器 react-reconciler 重新开发的 React 到终端的渲染层,可以使用 React 16.+ 的大部分特性。

在语法上 @hippy/react 更加接近底层终端,使用了类似 React Native 的语法。

*注*: 由于 Hippy 页面挂在一个节点上,所以 Portals 暂时无法支)

1.2 @hippy/react-web

该项目仍在开发中,有不完善的地方

考虑到客户端页面在不少场景下,需要提供web版本,例如分享页,h5版本的应用。

Hippy 提供了 @hippy/react-web 框架来支持 @hippy/react 项目通过转译,生成可以运行在浏览器中的版本,从框架上支持三端同构,减少开发成本

@hippy/react-web 是通过实现 @hippy/react 的组件的方式,每个组件提供相同的功能和相同的api,从而达到直接将 @hippy/react 项目代码直接转化为 web 版本

2. 三端同构思路

Hippy 可以便捷地实现三端重构

2.1 架构图

  1. @hippy/react 使用 Virtual Dom 维护组件的布局,通过 Native Renderer 对组件进行渲染,在终端中显示出来
  2. @hippy/react-web 通过 Component 实现 @hippy/react 组件的功能,同时使用 Adapters 实现原生组件的特性
  3. 使用 Hippy 开发的项目,只组要简单进行打包配置,就可以实现多端兼容。

2.2 项目三端同构思路

在实际的业务开发过程中,会遇到很多需要同时出现的app和web的页面需求,使用hippy可以简单实现这一需求。

使用 Hippy 进行三端同构,主要思路是:

  1. 页面功能,组件的表现尽可能在三端表现一致
  2. web页面抛弃 CSS 文件,通过 StyleSheet 来管理页面组件样式
  3. 各端特性化功能,通过独立文件维护: \*\*.hippy.jsx \*\*.web.jsx
  4. 各端代码独立webpack打包入口,实现平台特性需求
  5. 对页面路由做相应的处理
  6. 在终端中没有 window 等浏览器的全局变量,所以在终端中调用这些变量会导致页面挂掉

2.3 项目文件架构

创建 Hippy 项目,可以参考 Hippy-React脚手架开发,快速创建项目

2.3.1. 项目文件结构

代码语言:txt
AI代码解释
复制
build/ // webpack 配置

├── hippy-webpack.android-vendor.js // 打包android基础vendo

├── hippy-webpack.android.js // 打包android业务代码配置

├── hippy-webpack.dev.js // 终端本地调试配置

├── hippy-webpack.ios-vendor.js // 打包ios基础vendo

├── hippy-webpack.ios.js // 打包ios业务代码配置

├── hippy-webpack.web.dev.js // web 开发配置

├── hippy-webpack.web.js // web 打包配置

├── run-ios.js // 拉起IPHONE模拟器

├── template.html // web index.html 模板

└── vendor.js // 配置vendo



index.js // 原生入口

index.web.js // web 入口

2.3.2 @hippy/react 重定向

在 web版本的 webpack 配置文件中,通过alias的方式,将'@hippy/react' 替换成 '@hippy/react-web'

代码语言:txt
AI代码解释
复制
// build/hippy-webpack.web.dev.js

// build/hippy-webpack.web.js

resolve: {

    extensions: ['.js', '.jsx', '.json'],

    modules: [path.resolve(\_\_dirname, '../node\_modules')],

    alias: {

      '@hippy/react': '@hippy/react-web',

    },

  },

2.3.3 入口文件

* 终端入口文件

代码语言:txt
AI代码解释
复制
// index.js

import { Hippy } from '@hippy/react';

import App from './App';



new Hippy({

  appName: 'demo',

  entryPage: App,

}).start();

* web 入口文件

代码语言:txt
AI代码解释
复制
import { Hippy } from '@hippy/react';

import App from './App';

import \* as serviceWorker from './serviceWorker';



import './index.css'; // 通过引入css文件,对浏览器组件默认样式进行处理,以及一些需要使用伪元素的样式



new Hippy({

  appName: 'demo',

  entryPage: App,

}).start();



// 使用serviceWorke

serviceWorker.unregister();

2.3.4 平台个性化逻辑处理

Hippy 通过 Platform.OS 提供了平台判断,开发者可以根据平台实现不同的逻辑

代码语言:txt
AI代码解释
复制
import { Platform } from '@hippy/react';

const ISWEB = Platform.OS === 'web';

handleGoto (url) {

    if (ISWEB) {

        window.open(url)

        return;

    } else {

        // 调用原生跳转逻辑

    }

}

3. 优缺点

3.1 优点

  1. 减少开发量,提高开发效率
  2. 在app内体验好
  3. app实现热更新,快速发布

3.2 缺点

  1. 需要抛弃一些平台特性,例如CSS的伪元素,transition等,某种情况下增加了开发复杂度
  2. Hippy 暂时对 Navigator 支持较弱,是通过创建新的 Hippy 实例来实现多页面,页面间的数据同步比较麻烦
  3. Hippy 页面是在终端的一个 View Container中,因此安卓物理返回键需要做特殊处理
  4. 部分组件尚未实现多端接口统一,例如 @hippy/react-web 中的 ScrollView 组件的 style 属性尚未支持数组格式

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设备接入EasyGBS平台后请求实时流播放,出现超时是什么原因?
EasyGBS是基于公安部推出的安防主流协议(国标GB28181协议)的视频接入、处理及分发平台,具有视频直播监控、云端录像、云存储、检索回放、智能告警、语音对讲等功能,能够涵盖所有监控领域的视频能力需求,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。
TSINGSEE青犀视频
2022/06/02
4370
海康4200平台与EasyGBS级联后不能播放的排查及解决方法
国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。
TSINGSEE青犀视频
2023/03/20
5730
EasyCVR通过Ehome协议接入设备,获取RTSP流地址异常如何解决?
EasyCVR平台支持海量视频设备接入、视频汇聚与管理、转码与分发、告警上报、平台级联、智能分析等等。平台支持广泛的协议类型接入,包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等,并能支持对外分发多格式的视频流,如RTSP、RTMP、FLV、HLS、WebRTC等,实现全终端、全平台覆盖。
TSINGSEE青犀视频
2022/08/15
6550
EasyCVR新版本(v2.5.0)无法播放WebRTC视频,其他格式均正常播放,是什么原因?
EasyCVR平台基于云边端一体化管理,支持多协议、多类型的视频设备接入,对外可分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。在视频功能上,可提供服务器集群、视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等服务。
TSINGSEE青犀视频
2022/08/11
3590
EasyCVR接入国标GB28181设备,视频无法播放是什么原因?
EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。
TSINGSEE青犀视频
2023/06/02
2470
EasyCVR接入RTSP流,视频无法播放的原因排查与解决
EasyCVR基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等。
TSINGSEE青犀视频
2023/05/23
7040
EasyGBS如何进行内网映射两个公网?
EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。
TSINGSEE青犀视频
2023/05/19
3600
EasyCVR与EasyCVR通过国标级联视频无法播放:暂不支持TCP协议
互联网等新兴技术的发展,推动着安防行业向集成化、高清化、智能化、网格化方向升级。EasyCVR平台综合性强、视频能力丰富,平台基于云边端一体化管理,具有强大的数据接入、处理及分发能力,兼容性强、开放度高,功能可灵活拓展。在视频能力上,EasyCVR可支持视频实时监控直播、云端录像、云存储、回放与检索、智能告警、视频快照、设备/用户权限管理、平台级联等,能应用在多种场景中,如智慧工地、智慧工厂、智慧校园、智慧社区、智慧楼宇等等。
TSINGSEE青犀视频
2022/05/26
3700
EasyCVR平台出现WebRTC协议视频播放不了是什么原因?
EasyCVR部署简单、兼容性高,平台采用分布式部署,可对外提供统一的API接口,实现连接设备、连接数据、连接应用,便于第三方平台快速集成。在视频接入与输出上,平台支持设备通过国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等协议接入,对外可分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。
TSINGSEE青犀视频
2022/07/04
5310
国标GB28181安防视频平台EasyGBS显示状态正常,却无法播放该如何解决?
国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。国标GB28181视频监控平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。
TSINGSEE青犀视频
2023/08/21
3260
通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
EasyCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及平台级联等视频能力与服务。
TSINGSEE青犀视频
2023/04/26
4020
设备通过国标GB28181/Ehome接入EasyCVR,视频无法打开的原因分析及解决
EasyCVR平台支持多类型设备、多协议方式接入,包括市场主流标准协议国标GB/T28181、RTMP、RTSP/Onvif协议等,以及厂家私有协议,如海康SDK、大华SDK、海康Ehome等。平台可将接入的流媒体进行处理及分发,分发的视频格式包括RTSP、RTMP、FLV、HLS、WebRTC等。
TSINGSEE青犀视频
2022/09/01
8020
硬盘录像机通过国标GB28181协议注册到EasyCVR,为何频繁出现断流?
EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。
TSINGSEE青犀视频
2023/07/20
2610
EasyCVR平台配置公网后,Webrtc格式视频流无法播放是什么原因?
EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力。平台支持多协议接入,并能将接入的视频资源进行转码与分发,支持的视频流格式包括:RTSP、RTMP、HLS、FLV、Webrtc等格式,实现全终端、全平台覆盖。
TSINGSEE青犀视频
2023/04/26
3300
EasyCVR平台如何实现国标GB28181级联播放Ehome接入的设备录像?
EasyCVR视频融合平台基于云边端智能协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务,可支持的协议有:主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。
TSINGSEE青犀视频
2023/07/11
2830
前端设备使用Ehome协议接入EasyCVR无法播放问题解决
EasyCVR作为TSINGSEE青犀视频开发的视频协议融合平台,除了可以接入RTSP、GB28181外,还通过HIKSDK、Ehome等私有协议完成与设备的对接和视频流的传输。EasyCVR支持将所有视频通道通过GB28181协议级联到上级国标平台上,且支持同一通道级联到多个上级平台,这一操作给很多用户的级联带来了便捷。
TSINGSEE青犀视频
2021/09/17
5410
EasyGBS新版本使用https访问,不能播放视频是什么原因?
国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。
TSINGSEE青犀视频
2022/08/29
3100
EasyCVR平台通道视频正常播放,但设备录像却无法播放是什么原因?
EasyCVR是集视频互联网、存储、流媒体转发、视频转码、智能分析等多功能为一体的流媒体视频服务融合平台。平台基于云边端一体化架构,兼容性高、拓展性强,可支持多类型设备、多协议方式接入,包括国标GB/T28181、RTMP、RTSP/Onvif协议,以及厂家的私有协议,如:海康Ehome协议、海康SDK、大华SDK等。在功能上,EasyCVR可支持云端录像回看以及设备录像回看。
TSINGSEE青犀视频
2022/10/21
3920
EasyCVR视频融合平台设备接入的步骤及端口配置的相关注意事项
EasyCVR视频融合平台基于云边端架构,能实现视频汇聚与集中管理、视频多端分发、多屏展示。平台可支持多协议与多类型设备接入,具体包括国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等,能对外分发RTMP、RTSP、HTTP-FLV、WS-FLV、HLS、WebRTC等。今天来给大家详细介绍下EasyCVR视频融合云平台的设备接入步骤。
TSINGSEE青犀视频
2023/05/11
9180
EasyCVR国标协议接入设备,设备在线、通道却不在线的原因是什么?
EasyCVR支持多协议、多类型设备接入,包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、海康Ehome等,属于融合性、综合性较强的视频平台。在接入类型上,GB28181协议与海康EHOME协议均属于主动注册的设备协议,用户可在平台页面的配置中心里,根据SIP信息来配置设备。
TSINGSEE青犀视频
2022/07/13
7250
推荐阅读
设备接入EasyGBS平台后请求实时流播放,出现超时是什么原因?
4370
海康4200平台与EasyGBS级联后不能播放的排查及解决方法
5730
EasyCVR通过Ehome协议接入设备,获取RTSP流地址异常如何解决?
6550
EasyCVR新版本(v2.5.0)无法播放WebRTC视频,其他格式均正常播放,是什么原因?
3590
EasyCVR接入国标GB28181设备,视频无法播放是什么原因?
2470
EasyCVR接入RTSP流,视频无法播放的原因排查与解决
7040
EasyGBS如何进行内网映射两个公网?
3600
EasyCVR与EasyCVR通过国标级联视频无法播放:暂不支持TCP协议
3700
EasyCVR平台出现WebRTC协议视频播放不了是什么原因?
5310
国标GB28181安防视频平台EasyGBS显示状态正常,却无法播放该如何解决?
3260
通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
4020
设备通过国标GB28181/Ehome接入EasyCVR,视频无法打开的原因分析及解决
8020
硬盘录像机通过国标GB28181协议注册到EasyCVR,为何频繁出现断流?
2610
EasyCVR平台配置公网后,Webrtc格式视频流无法播放是什么原因?
3300
EasyCVR平台如何实现国标GB28181级联播放Ehome接入的设备录像?
2830
前端设备使用Ehome协议接入EasyCVR无法播放问题解决
5410
EasyGBS新版本使用https访问,不能播放视频是什么原因?
3100
EasyCVR平台通道视频正常播放,但设备录像却无法播放是什么原因?
3920
EasyCVR视频融合平台设备接入的步骤及端口配置的相关注意事项
9180
EasyCVR国标协议接入设备,设备在线、通道却不在线的原因是什么?
7250
相关推荐
设备接入EasyGBS平台后请求实时流播放,出现超时是什么原因?
更多 >
LV.0
腾讯前端工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档