1.RN是否支持C/C++代码
在Node.js的层次上,是支持使用一个叫node-gyp的技术,可以将C/C++代码编译成 .node 文件,然后供node服务器使用。我试了一下在RN上实践使用了这个技术的swisseph版本(https://github.com/mivion/swisseph),悲催地发现RN并不支持.node文件。最后,只能乖乖地分别在iOS和安卓平台上使用C,制作成原生的模块,供RN使用。
搜索时发现已经有人在研究这个。路线是 C 代码转成 JAVA 代码,JAVA代码再转为RN能用的代码,套路很深,一时进行不下去。
2.RN不支持 __dirname 全局参数
目前,可能会有一些npm_modules 使用 __dirname 作为全局参数调用。在RN中引用的时候,会报 __dirname 参数错误。这个时候,需要在模块相应的js文件中,将 __dirname 取消,路径变成相对路径的引用即可。
3.运行项目时的缓存问题
通过npm install 到项目底下的模块,似乎在更改其内容后,没有办法通知cli Server模块内容已改变,重新 react-native run-ios 也没有办法解决这个问题。这个时候,需要:
1)关闭原来正在运行的cli服务,点终端窗口左上的X就好。
2)打开终端执行代码:
cd 项目路径
npm start --reset-cache
3)重新在手机模拟器界面reload即可。
以上这个代码,可以做 .sh 文件,然后通过右击该文件,选择打开方式跟终端app绑定。之后双击该文件即可执行以上代码内容(可以进一步将 .sh 文件拖放到Launch Dock上)。.sh文件的内容如下
#! /bin/bash
cd 项目路径
npm start --reset-cache
4.图标字体的使用
现在比较流行用这个,图标字体文件轻量,使用起来更简单。我在做的占星软件,其实所使用的占星符号也是来自于字体。从Object-C转过来之后,使用图标字体变得水到渠成。以下是一些有用的资源:
1)开源项目react-native-vector-icons里面有多种图标字体,同时该模块也支持自定义。
2)自定义字体时,需要处理一套3个文件:字体本身.ttf,字体.js,字体.json(定义对应编码的文件)。这三个文件参照项目已有文件Copy再修改就好。需要注意,在"字体.js"中,要给出的参数是 FontFamily,这个并不跟字体名称一样,而是需要对照字体属性放上去。
3)编辑字体,Mac下可以考虑软件 Glyphs 2。iOS支持ttf和otf格式。
4)如果想绕开 react-native-vector-icons,自已造轮子的话,以下代码很关键:
glyph=String.fromCharCode(glyph); //glyph 是字符在字体中的编码,例如 F0A0 这种的10进制数字
// 以下代码在render(){}中:
<Text>{glyph}</Text>