自定义组件和模块

自定义组件

写个 React 组件,在需要渲染的地方通过 nativeName 指定到终端组件名称即可,以终端范例中的 MyView 为例:

  1. import React from "react";
  2. import { UIManagerModule } from "@hippy/react"
  3. export class MyView extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. this.state = {};
  7. this.changeColor = this.changeColor.bind(this);
  8. }
  9. changeColor(color) {
  10. // callUIFunction 只能接收一个实际渲染的终端节点
  11. UIManagerModule.callUIFunction(this.instance, "changeColor", [color]);
  12. }
  13. render() {
  14. return (
  15. <div
  16. ref={ref => this.instance = ref} // 设置 ref 方便 changeColor 获取
  17. nativeName="MyView" // **必须:**将前端组件与终端组件进行绑定
  18. {...this.props}
  19. ></div>
  20. )
  21. }
  22. }

自定义模块

该范例仅可以在 Android 下运行。

前端扩展模块分为三步:

  1. 第一步导入 callNative 或者 callNativeWithPromise 接口
  2. 封装调用接口
  3. 导出模块
  1. // TestModule.js
  2. import { callNative, callNativeWithPromise } from "@hippy/react"
  3. /*
  4. 自定义module
  5. */
  6. const TestModule = {
  7. log(msg) {
  8. callNative("TestModule", "log", msg)
  9. },
  10. helloNative(msg) {
  11. callNative("TestModule", "helloNative", msg)
  12. },
  13. //这个是需要终端回调的
  14. helloNativeWithPromise(msg) {
  15. return callNativeWithPromise("TestModule", "helloNativeWithPromise", msg);
  16. }
  17. }
  18. export { TestModule }

使用

  1. import React from "react";
  2. import { Text } from "@hippy/react"
  3. import { TestModule } from "./TestModule"
  4. //展示自定义Module的使用
  5. export default class TestModuleDemo extends React.Component {
  6. static defaultProps = {};
  7. constructor(props) {
  8. super(props);
  9. this.state = { hello: "TestModule log" }
  10. //调用
  11. TestModule.log("hello I am from js");
  12. TestModule.helloNative({ hello: "I am from js" })
  13. TestModule.helloNativeWithPromise({ hello: "I am from js" })
  14. .then(rsp => this.setState({ hello: JSON.stringify(rsp) }));
  15. }
  16. render() {
  17. const { hello } = this.state;
  18. return (
  19. <Text style={{ color: "red" }}>
  20. {hello}
  21. </Text>
  22. )
  23. }
  24. }