就RN生态来说,绝大部分基础组件都能轻松找到开源实现,唯独在地图方面可选项并不多,要么是对系统地图组件的简单封装、要么就是像Mapbox这样使用门槛略高,反而是OpenLayers这样的纯js组件不仅使用简单、功能还强大。
嘛…… 唯一的缺点是没有RN封装,需要借助于webview的hybird模式。
一开始功能简单,就一个单一h5页面,什么逻辑都往里面塞,在源码目录下建个pages文件夹,iOS不用操心,打包时会自动拷贝至ios/assets目录下,Android在打包前需要手工拷贝至android/app/src/main/assets目录,然后使用WebView加载本地html文件即可:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19renderMap() {
let source = require('../pages/explore.html');
let originWhitelist = ['*'];
if ('android' === Platform.OS && !Global['__DEV__']) {
source = { uri: 'file:///android_asset/pages/explore.html' };
originWhitelist = null;
}
let view = null;
view =
<WebView
ref={(webview) => {
this.webview = webview;
}}
originWhitelist={originWhitelist}
allowUniversalAccessFromFileURLs={true}
source={source}
/>
return view;
}
等到代码膨胀至几千行滚轮滚着实在太累、就又拆分出来数个功能函数js,但想再继续扩展就有些力不从心了:
- 只能使用ES5语法,好多ES6新特性用不上 —— 不是太清楚跟RN的打包怎么集成,也没有太多时间精力去研究;
- 页面上第三方组件库引入麻烦;
- 功能调试只能使用像是alert、console.log这类原始方法。