使用ICE构建weex小程序
安装Mac开发运行环境
- 安装homebrew
- 安装git
- 配置gitlab
- 安装nvm
- 配置nvm
- 安装nodejs
- 安装npm相关工具
- 安装cli的XXX工具。后续的XXX都是指文章中的cli工具
- 安装VSCode
- 安装VSCode插件
- 中文语言包
- Prettier
- ESLint
- Bracket Pair Colorizer
- Path Intellisense
- markdownlint
- 配置prettier
- 配置code command in PATH
项目初始化
使用CLI命令进行项目工程初始化
1
2
3
4
5
6
7
> XXX init weex
?Please choose target app for the project
> 百度APP √
> 抖音APP
> 手淘APP
然后一步步选下去就行了,填写项目类型和项目名称等信息
最后gitlab和XXX发布平台都会有项目了
1
2
npm install
npm start
运行hello world项目
添加自定义标签支持
端侧要做的事情
在端上新建一个继承自ViewNode
或是WXComponent
的节点。
并实现如下方法就能进行端上调用前端方法,前端调用端上方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- (UIView *)loadView {
// 组件指向的端上view
return [RAMTestView new];
}
- (void)updateAttributes:(NSDictionary *)attributes {
// 获取便签的属性
NSLog([attributes valueForKey:@"src"]); // from
}
// 供前端使用ref进行调用的方法
// testRef.current.test({ param: 'value' });
- (void)test:(NSDictionary *)params {
NSLog(@"param: %@", params);
// 调用前端写在标签中的方法,前端使用onTest1
[self fireEvent:@"test1" params:@{}];
}
// 需要暴露给前端的方法,export出来
+ (NSDictionary *)exports {
return @{
@"test": NSStringFromSelector(@selector(test))
};
}
注册标签
1
[WXSDKEngine registerComponent:@"laoqiutest" withClass:[RAMTestComponent class]];
前端要做的事情
在初始化项目中添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 使用 react hooks
import { useState, useRef, useEffect } from 'react';
// 调用端上注册的module方法
export nativeApi = weex.requireModule('nativeApi') || {}
export default function Home() {
// 用来调用前端方法的react useRef hook
const testRef = useRef();
// 状态监听机制
const [count, setCount] = useState(1);
useEffect(() => {
const handler = () => {
setParams({ testTipShowed: 'true' });
};
const handlerClick = () => {
console.log('rambo test')
};
// 监听sdk调用的appear方法,主要就是监听端上调用fire event的事件
window.addEventListener('appear', handler);
// 端上调用前端方法onTest1就能收到事件监听
window.addEventListener('test1', handlerClick);
return () => {
window.removeEventListener('appear', handler)
window.removeEventListener('test1', handlerClick)
};
}, []);
const onRamboClick = () => {
// 调用端上module暴露的接口negligible
nativeApi.toast({ message: 'rambo 前端调用端上方法' });
// 前端调用端上export出来的方法
testRef.current.test({ param: 'value' });// native通过export暴露给前端调用的方法
};
return (
<div className={styles.app}
// div的点击事件
onClick={ () => { onRamboClick(); }
}>
<laoqiutest
src='from'
ref={testRef} // 前端调用端上export出来的方法
onTest1={() => {
// 端上通过fire event可以调用到的方法
nativeApi.toast({ message: 'rambo 端上使用fireevent调用前端方法' });
}}
>自定义标签测试</laoqiutest>
</div>
);
}
本文由作者按照 CC BY 4.0 进行授权