平台判断
我们在开发 React Native 应用的时候,有时候会遇到需要分平台处理的情况,一般是根据Platform.OS
,或者平台文件来区分。
微信小程序平台也一样
Platform.OS
当 Platform.OS 的值为 wx 的时候,表明代码运行在小程序环境中。
if (Platform.OS === 'wx') {
// do 小程序 code
} else {
// do rn code
}
平台文件
React Native 本身提供了文件级别的平台判断方式,比如我们可以有 a.android.js , a.ios.js 。 React Native 会根据对应的平台去加载对应的文件,如安卓平台上加载 a.android.js 。小程序转化引擎延续了这种方式: a.wx.js 。当存在 a.wx.js 文件的时候,转化引擎会直接使用这个文件。
最后
平台判断有两种方式,那么应该选用代码级别(Platform.OS),还是选用文件级别的平台判断呢?如果仅有少部分代码需要分平台处理,那么优先选择代码级别的方式,因为比较简单。如果不同平台代码差异很大,或者在微信平台需要引入其它平台无法处理的模块时,应该选用文件级别的方式。
微信小程序对包大小有限制。当选择文件级别的时候,转化/打包会忽略其它平台文件,所以从包大小的角度来说,文件级别的方式更具有优势。
另外,现在常常被大家忽视的一点,我们在React Native 开发的时候,常常写如下的代码
if (Platform.OS === 'ios') {
} else {
}
我们默认了 else分支是在处理 Android的代码, 其实不然, 现在else不仅处理Andorid代码, 也处理了小程序的代码,通常这不是我们想要的。 在写React Native代码的时候 需要时刻记住, 现在我们在写的是3个平台的代码。