# Custom Component And Module --- # Custom Components Define a custom React component by specifying the name of the native component by `nativeName` where it needs to be rendered. Take `MyView` in the native example as an example: ```javascript import React from "react"; import { UIManagerModule } from "@hippy/react" export class MyView extends React.Component { constructor(props) { super(props); this.state = {}; this.changeColor = this.changeColor.bind(this); } changeColor(color) { // callUIFunction can only receive one actually rendered endpoint UIManagerModule.callUIFunction(this.instance, "changeColor", [color]); } render() { return (
this.instance = ref} // Set ref for easy changeColor acquisition nativeName="MyView" // **Required**: Bind the front-end component to the native component {...this.props} >
) } } ``` # Custom Modules > This example only works on Android. Front-end expansion modules are divided into three steps: 1. Import callNative or callNativeWithPromise interface 2. Encapsulate the calling interface 3. Export module ```javascript // TestModule.js import { callNative, callNativeWithPromise } from "@hippy/react" /* Custom module */ const TestModule = { log(msg) { callNative("TestModule", "log", msg) }, helloNative(msg) { callNative("TestModule", "helloNative", msg) }, // Requires native callback helloNativeWithPromise(msg) { return callNativeWithPromise("TestModule", "helloNativeWithPromise", msg); } } export { TestModule } ``` ## Use ```jsx import React from "react"; import { Text } from "@hippy/react" import { TestModule } from "./TestModule" // Example of the use of custom Module export default class TestModuleDemo extends React.Component { static defaultProps = {}; constructor(props) { super(props); this.state = { hello: "TestModule log" } // calling module TestModule.log("hello I am from js"); TestModule.helloNative({ hello: "I am from js" }) TestModule.helloNativeWithPromise({ hello: "I am from js" }) .then(rsp => this.setState({ hello: JSON.stringify(rsp) })); } render() { const { hello } = this.state; return ( {hello} ) } } ```