import * as React from 'react' import { NativeModules, requireNativeComponent, View, ViewProps, ViewPropTypes } from 'react-native' import * as PropTypes from 'prop-types' import MessageHandler from './MessageHandler' import { UnityModule, UnityViewMessage } from './UnityModule' import { Component, useEffect, useState } from 'react' const { UIManager } = NativeModules export interface UnityViewProps extends ViewProps { /** * Receive string message from unity. */ onMessage?: (message: string) => void; /** * Receive unity message from unity. */ onUnityMessage?: (handler: MessageHandler) => void; children?: React.ReactNode } let NativeUnityView class UnityView extends Component { state = { handle: null } componentDidMount(): void { const { onUnityMessage, onMessage } = this.props this.setState({ handle: UnityModule.addMessageListener(message => { if (onUnityMessage && message instanceof MessageHandler) { onUnityMessage(message) } if (onMessage && typeof message === 'string') { onMessage(message) } }) }) } componentWillUnmount(): void { UnityModule.removeMessageListener(this.state.handle) } render() { const { props } = this return ( {props.children} ) } } /* const UnityView = ({ onUnityMessage, onMessage, ...props } : UnityViewProps) => { const [handle, setHandle] = useState(null) useEffect(() => { setHandle(UnityModule.addMessageListener(message => { if (onUnityMessage && message instanceof MessageHandler) { onUnityMessage(message) } if (onMessage && typeof message === 'string') { onMessage(message) } })) return () => { UnityModule.removeMessageListener(handle) } }, [onUnityMessage, onMessage, handle, setHandle]) return ( {props.children} ) } */ NativeUnityView = requireNativeComponent('RNUnityView', UnityView) export default UnityView;